我目前正在编写一个需要
os
、stat
和其他一些内容的课程。
在我的班级中导入这些模块的最佳方式是什么?
我正在考虑其他人何时会使用它,我希望“依赖”模块已经存在 实例化类时导入。
现在我将它们导入到我的方法中,但也许有更好的解决方案。
如果您的模块始终导入另一个模块,请始终将其放在顶部,如 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()
如果您只想在类被实例化时导入它,请在
__new__
或__init__
中进行。
import sys
from importlib import import_module
class Foo():
def __init__(self):
moduleName = "myLovelyModule"
# If conditional importing is needed, a variable updated
# from the configuration of the application can be used.
self.importTheModule = True # "True" Or "False"
self.importedModule = None
if self.importTheModule:
self.importedModule = import_module(moduleName)
# ---
# Usage:
if self.importedModule is not None:
self.importedModule.functionA(params)
# or
if moduleName in sys.modules:
self.importedModule.functionA(params)
# or
if self.importTheModule:
self.importedModule.functionA(params)
# ---
PEP 8 进口:
导入始终放在文件顶部,紧接在任何模块之后 注释和文档字符串,以及模块全局变量和常量之前。
这使得您可以轻松查看手头文件使用的所有模块,并避免在多个位置使用模块时必须在多个位置复制导入。其他所有内容(例如函数/方法级导入)都应该是绝对例外,并且需要充分证明其合理性。
This(搜索“导入”部分)官方文件指出,
import
通常应放在源文件的顶部。除了特殊情况,我会遵守这条规则。