我有两个类,classA
和classB
classA
有一个名为image
的属性,该属性包含随时变化的数据。我希望能够有一个classB
的实例,当我在这个实例上调用一个方法时,它可以从classA
访问self.image
。不幸的是,我的尝试失败了
示例代码:
classA:
def __init__(self):
self.image = None #initialise
analysis = classB(self)
def doingstuff(self):
self.image = somethingchanginghere()
measurement = analysis.find_something_cool()
print measurement
classB:
def __init__(self, master):
self.image = master.image #get a reference to the data from other class
def do_something_cool(self):
return type(self.image) #find something about the data at the point when method is called
main = classA()
main.doingstuff()
我得到一个错误,说数据仍然是None
,也就是说,它仍然处于初始化时的状态,并且当类a中的self.image发生更改时,classB
对classA
的引用没有更新。我做错了什么
为什么工作示例会给出NoneType
?我在等一个随机数
您的代码有两个问题:
analysis
是classA.__init__
和classA.doingstuff
函数的局部变量。如果您希望在其他函数中重用它,应该将它定义为一个属性:self.analysis = classB(self)
Pythondoesn't pass variables by reference。执行
analysis = classB(self)
操作时,创建一个classB
的对象,将对象self
作为参数传递。它不是对对象的引用,因此classB.image
只在classB.__init__
中设置和/或更改一次。如果您希望保持更新,您应该:然后使用
master.image
获得图像,或者实现classB
方法,例如每次
image
改变时都叫它相关问题 更多 >
编程相关推荐