我有两个班级,classA
和classB
。 classA
有一个名为image
的属性,其中包含一直在变化的数据。我希望能够拥有classB
的实例,当我在此实例上调用方法时,它可以从self.image
访问classA
。不幸的是,我的尝试失败了。
示例代码:
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
,即它仍处于初始化时的状态,并且classA
对classB
的引用在自我时未更新classA中的.image改变了。我做错了什么?
为什么工作示例会给出NoneType
?我期待一个随机数。
答案 0 :(得分:1)
您的代码存在两个问题:
analysis
是classA.__init__
和classA.doingstuff
函数的本地变量。如果您希望在其他功能中重复使用它,则应将其定义为属性:self.analysis = classB(self)
。
Python doesn't pass variables by reference。执行analysis = classB(self)
时,创建一个classB
对象,并将对象self
作为参数传递。 不是对象的引用,因此classB.image
仅在classB.__init__
中设置和/或更改一次。如果您希望更新它,您应该:
classB:
def __init__(self, master):
self.master = master
然后使用master.image
获取图片,或实施classB
方法,例如
def update(self, image):
self.image = image
每次image
更改时都会调用它。