使一个类可以访问另一个类的参数

2024-09-30 10:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个类,classAclassBclassA有一个名为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发生更改时,classBclassA的引用没有更新。我做错了什么

为什么工作示例会给出NoneType?我在等一个随机数


Tags: the数据实例imageselfnone示例属性
1条回答
网友
1楼 · 发布于 2024-09-30 10:28:17

您的代码有两个问题:

  1. analysisclassA.__init__classA.doingstuff函数的局部变量。如果您希望在其他函数中重用它,应该将它定义为一个属性:self.analysis = classB(self)

  2. Pythondoesn'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改变时都叫它

相关问题 更多 >

    热门问题