在python类中导入模块

时间:2011-07-28 15:24:49

标签: python class import module

我目前正在编写一个需要osstat和其他一些课程的课程。

在班上导入这些模块的最佳方法是什么?

我正在考虑其他人何时会使用它,我希望'依赖'模块已经存在 在实例化类时导入。

现在我用我的方法导入它们,但也许有更好的解决方案。

4 个答案:

答案 0 :(得分:39)

如果您的模块将始终导入另一个模块,请始终将其置于顶部PEP 8,其他答案指示。此外,正如@delnan在评论中提到的那样,sysos等正在被使用,因此在全球范围内导入它们并没有什么坏处。

但是,条件导入没有任何问题,如果你真的只需要在某些运行时条件下使用模块。

如果您只想在类定义时导入它们,就像该类在条件块或其他类或方法中一样,您可以执行以下操作:

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)

导入

PEP 8

  

导入总是放在文件的顶部,就在任何模块之后   注释和文档字符串,以及模块全局和常量之前。

这样可以轻松查看手头文件使用的所有模块,并避免在多个位置使用模块时在多个位置复制导入。其他所有内容(例如函数/方法级别的导入)应该是一个绝对的例外,并且需要很好地证明其合理性。

答案 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通常应放在源文件的顶部。除了特殊情况,我会遵守这条规则。