我正在尝试获取要导入的模块,但仅当调用特定类的对象时。例如:
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()
但我不想在我想使用的每个函数中都导入模块,我希望它对整个类都可用,但只有在实例化了该类的一个实例时,才。如果我说得不够清楚,我会道歉。。。
在导入模块之前,您还可以考虑使用
global OneHelper
。这会将OneHelper添加到全局命名空间。import OneHelper
在类中工作良好,使其成为类属性。在定义类之后,您可以用dir(One)
来验证这一点——这里有您的OneHelper
属性。One.OneHelper
是对模块的引用。当然,在一个实例中,您可以通过方法以self.OneHelper
的形式访问它。(您也可以继续以One.OneHelper
的形式访问它。)导入到
__init__
并将其属性设置为某些属性:您的示例看起来很有趣,因为如果模块无法导入,以后调用它有什么意义?
相关问题 更多 >
编程相关推荐