python 3类实例相互调用';属性/变量?
我的主要模块“actormain”如下所示:python 3类实例相互调用';属性/变量?,python,python-3.x,Python,Python 3.x,我的主要模块“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
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\u实例。body.hands.owner.body.hands.fingers.owner.body。。。等等。
,它工作正常。但是如果我尝试从实例“fingers”中引用它(使用相同的语法!),例如,我会得到“AttributeError:'actor'对象没有属性“body”。
此外,如果在命令行中,我会说:
>>>a = actor(args)
>>>a.body.owner.body
<bodymain.body object at 0x0000000002F74A90>
>a=actor(args)
>>>a、 body.owner.body
很明显,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'
>将actormain作为am导入
>>>b=男演员(‘鲍勃’、‘他’、‘他的’、‘苗条’)
创造鲍勃。
化身鲍勃。
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
b=男演员(‘鲍勃’、‘他’、‘他的’、‘苗条’)
文件“C:\ProgramFiles(x86)\python361\lib\actormain.py”,第16行,在\uuu init中__
self.body=bd.body(self.owner,self.bodydesc)
文件“C:\ProgramFiles(x86)\python361\lib\bodymain.py”,第13行,在\uuu init中__
self.hand=so.hand(self.owner“”)
文件“C:\ProgramFiles(x86)\python361\lib\sensorg.py”,第156行,在\uuu init中__
self.fingers=fingers(self.owner“”)
文件“C:\ProgramFiles(x86)\python361\lib\sensorg.py”,第110行,在\uuu init中__
self.a=self.owner.body
AttributeError:“actor”对象没有属性“body”
到底怎么回事?为什么我不能引用这个?您可以从回溯中看到发生了什么。您的代码调用self.body=body(…)来创建一个body。在创建主体的过程中,一些代码试图访问“所有者”主体。但是它的主人还没有尸体,因为它还在被创造的过程中
如果您的身体部位需要能够访问身体,则不能从身体创建内部创建它们。在对
body(…)
的调用完全完成并返回之前,body将不存在。请展示一个完整的、自包含的示例,演示哪些不起作用。可能self.owner
不是您在fingers
类中所认为的那样。从命令行中,引用fingers.owner给出演员对象,fingers.owner.body给出演员的身体对象。请展示一个完整的、自包含的示例,说明什么是不起作用的。我希望这对你有帮助。