我目前正在编写一个需要os
,stat
和其他一些课程的课程。
在班上导入这些模块的最佳方法是什么?
我正在考虑其他人何时会使用它,我希望'依赖'模块已经存在 在实例化类时导入。
现在我用我的方法导入它们,但也许有更好的解决方案。
答案 0 :(得分:39)
如果您的模块将始终导入另一个模块,请始终将其置于顶部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__
中执行此操作。
答案 1 :(得分:11)
导入总是放在文件的顶部,就在任何模块之后 注释和文档字符串,以及模块全局和常量之前。
这样可以轻松查看手头文件使用的所有模块,并避免在多个位置使用模块时在多个位置复制导入。其他所有内容(例如函数/方法级别的导入)应该是一个绝对的例外,并且需要很好地证明其合理性。
答案 2 :(得分:5)
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)
答案 3 :(得分:0)
This(搜索“进口”部分)官方文件指出,import
通常应放在源文件的顶部。除了特殊情况,我会遵守这条规则。