agf*_*agf 42
如果您的模块将始终导入另一个模块,请始终将其作为PEP 8置于顶部,其他答案指示.此外,作为@delnan提到了一个评论,sys
,os
等正在反正使用,所以它不会伤害到全球范围内导入.
但是,如果在某些运行时条件下确实只需要一个模块,则条件导入没有任何问题.
如果您只想在定义类时导入它们,比如类是否在条件块或其他类或方法中,您可以执行以下操作:
condition = True
if condition:
class C(object):
os = __import__('os')
def __init__(self):
print self.os.listdir
C.os
c = C()
Run Code Online (Sandbox Code Playgroud)
如果您只希望在实例化类时导入它,请在__new__
或中执行__init__
.
import sys
from importlib import import_module
class Foo():
def __init__(self):
if self.condition:
self.importedModule = import_module('moduleName')
if 'moduleName' in sys.modules:
self.importedModule.callFunction(params)
#or
if self.condition:
self.importedModule.callFunction(params)
Run Code Online (Sandbox Code Playgroud)