Python只将模块导入到一个类中

2024-04-27 04:01:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试获取要导入的模块,但仅当调用特定类的对象时。例如:

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()

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

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()

但我不想在我想使用的每个函数中都导入模块,我希望它对整个类都可用,但只有在实例化了该类的一个实例时,。如果我说得不够清楚,我会道歉。。。


Tags: 模块函数importselfobjectdeffunctionthis
3条回答

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

import OneHelper在类中工作良好,使其成为类属性。在定义类之后,您可以用dir(One)来验证这一点——这里有您的OneHelper属性。One.OneHelper是对模块的引用。当然,在一个实例中,您可以通过方法以self.OneHelper的形式访问它。(您也可以继续以One.OneHelper的形式访问它。)

导入到__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()

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

相关问题 更多 >