Python只将模块导入一个类

时间:2010-12-19 05:17:16

标签: python import

我正在尝试导入一个模块,但只有在调用特定类的对象时才会这样。例如:

class One(object):
    try:
        import OneHelper
    except ImportError:
        pass
    def __init__(self):
        # this function doesn't use OneHelper
        ...

    def blah(self):
        # this function does
        OneHelper.blah()

当调用NameError: global name 'OneHelper' is not defined函数时,这会导致One.blah()。到目前为止,我发现唯一有效的方法是将模块导入到使用它的实际函数中。所以:

class One(object):
    def __init__(self):
        # this function doesn't use OneHelper
        ...

    def blah(self):
        try:
            import OneHelper
        except ImportError:
            pass
        # this function does
        OneHelper.blah()

但是我不想在我想要使用的每个函数中导​​入模块,我希望它可以用于整个类,但只有如果是一个实例class被实例化。如果我不够清楚,请道歉......

3 个答案:

答案 0 :(得分:8)

import OneHelper在类中工作正常,使其成为类属性。您可以在定义课程后使用dir(One)验证这一点 - 这是您的OneHelper属性。 One.OneHelper是对模块的引用。当然,在一个实例中,您可以从方法中将其作为self.OneHelper访问。 (您也可以继续以One.OneHelper的形式访问它。)

答案 1 :(得分:2)

将其导入__init__并将其归属于某个属性:

class One(object):
    def __init__(self):
        try:
            import OneHelper
        except ImportError:
            self.OneHelper = None
        else:
            self.OneHelper = OneHelper
    def blah(self):
        if self.OneHelper:
            self.OneHelper.blah()

您的示例看起来很有趣,因为如果模块无法导入,以后调用它的重点是什么?

答案 2 :(得分:0)

在导入模块之前,您还可以考虑使用global OneHelper。这将OneHelper添加到全局命名空间。