Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 3类实例相互调用';属性/变量?_Python_Python 3.x - Fatal编程技术网

python 3类实例相互调用';属性/变量?

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

我的主要模块“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\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给出演员的身体对象。请展示一个完整的、自包含的示例,说明什么是不起作用的。我希望这对你有帮助。