我的主模块“actormain”看起来像这样:
import bodymain as bd
import soulmain as sl
(import statements of the other relevant modules, long and not super relevant)
class actor():
def __init__(self, name, pron1, pron2, desc):
self.name = name
print ('creating ' + self.name + '.')
self.owner = self
self.pron1 = pron1
self.pron2 = pron2
self.desc = desc
self.body = bd.body(self.owner)
self.soul = sl.soul(self.owner)
self.greet()
def greet(self):
print (self.pron1 + ' calls out, "Hey, my name\'s ' + self.name + '."')
它将“self.body”设置为一个值(这是另一个类的实例,“body()”,在另一个模块中),然后以更多的细节构建身体的其余部分(例如:body实例包含“hands()”类的实例,在第三个模块中定义),将actor实例作为变量“owner”传递。
我的问题:在命令行中,我可以参考,比方说,
actor_instance.body.hands.owner.body.hands.fingers.owner.body... etc.
,它运作正常。但是,如果我尝试从实例“手指”中引用它(使用相同的语法!),例如,我得到"AttributeError: 'actor' object has no attribute 'body'."
更多,如果在命令行中,我说:
>>>a = actor(args)
>>>a.body.owner.body
<bodymain.body object at 0x0000000002F74A90>
很明显,actor对象有一个body属性。
但在加载时,这个:
>>> import actormain as am
>>> b = am.actor('bob', 'he', 'his', 'slim')
creating bob.
incarnating bob.
Traceback (most recent call last):
File "<pyshell#268>", line 1, in <module>
b = am.actor('bob', 'he', 'his', 'slim')
File "C:\Program Files (x86)\python361\lib\actormain.py", line 16, in __init__
self.body = bd.body(self.owner, self.bodydesc)
File "C:\Program Files (x86)\python361\lib\bodymain.py", line 13, in __init__
self.hand = so.hand(self.owner, '')
File "C:\Program Files (x86)\python361\lib\sensorg.py", line 156, in __init__
self.fingers = fingers(self.owner, '')
File "C:\Program Files (x86)\python361\lib\sensorg.py", line 110, in __init__
self.a = self.owner.body
AttributeError: 'actor' object has no attribute 'body'
到底是怎么回事?为什么我不能参考这个?
答案 0 :(得分:0)
您可以从追溯中看到发生了什么。您的代码调用self.body = body(...)
来创建正文。在创建正文的过程中,某些代码会尝试访问“所有者”的正文。但是主人还没有身体,因为它仍然处于被创造的过程中。
如果您的身体部位需要能够进入身体,则无法从身体内部创建它们。在body(...)
的调用完全结束并返回之前,正文将不存在。