使用__import__获取'无属性'错误

时间:2013-03-05 22:11:35

标签: python

我遇到了一个奇怪的问题,我在搜索中没有发现任何类似的问题;这可能意味着问题显而易见,我只是没有看到它。 我有一个名为modulefile.py的类模块,位于名为modulefolder的文件夹中。这是modulefile.py:

class moduleclass(object):
    def __init__(self):
        self.parameter = 5

现在,在我的test1.py文件中,我这样做:

from modulefolder.modulefile import moduleclass
myobj = moduleclass()
print myobj.parameter

这很好用 - 它会按预期打印值5.

现在,我的问题是在我的应用程序中,我不会知道modulefolder,modulefile和moduleclass直到运行时。它们将以字符串形式提供给我。所以我尝试了这个,这是test2.py:

module = __import__("modulefolder.modulefile", fromlist=["moduleclass"])
myobj = getattr(module, "moduleclass")
print myobj.parameter

这不起作用,我收到错误AttributeError: type object 'moduleclass' has no attribute 'parameter'

所以,这就是令我困惑的事情。在test1.py和test2.py中,我将打印状态更改为print dir(myobj),我得到了这个:

对于test1.py:

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'parameter']

对于test2.py

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

所以,显然,第二种导入方法缺少我的'参数'属性。问题是,我不知道为什么。

为什么这种动态导入方法会影响实例化对象的工作方式?我该怎么做才能解决它?

我搜索过高低寻找答案,所以这可能是我忽略的直截了当,或者只是不完全理解。

1 个答案:

答案 0 :(得分:4)

您没有在test2.py中实例化您的课程:

myobj = getattr(module, "moduleclass")()