Best practices with import?
Gordon McMillan
gmcm at hypernet.com
Tue Jul 31 14:04:17 EDT 2001
Jay O'Connor wrote:
[using import inside functions, classes...]
> class MyEngine:
> def __init__ (self):
> import engine_support
>
> def doSomething (self):
> #is engine_support is scope?
> engine_support.do_something()
[snip]
> hmmmm...I just tested it, both references to engine_support outside of
> __init__ fail with a NameError. *THAT* would be something useful to
> have...a class level import; import the module in __init__, it's in
> scope for the whole class
>
> The best workaround for now I could think of is either to assign an
> instance variable to the module
[snip]
> or to assign it to a global in the module so that once it's imported,
> it's available to the whole module.
>
> I can see the use for being able to import a module into a function, but
> having it in visible outside of that function (especially in classes)
Assigning to an instance variable is a perfectly sane way to do that.
Note that in
def f1():
import x
def f2()
import x
f1()
f2()
all the heavy lifting is done when f1 executes. When f2 executes, import
finds x already in sys.modules, so the second import is very cheap (but
not free).
I would suggest staying away from trying to make a delayed import
visible globally, it's just too fragile.
- Gordon
More information about the Python-list
mailing list