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

时间:2016-07-13 09:31:46

标签: python oop

我有两个班级,classAclassBclassA有一个名为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,即它仍处于初始化时的状态,并且classAclassB的引用在自我时未更新classA中的.image改变了。我做错了什么?

为什么工作示例会给出NoneType?我期待一个随机数。

1 个答案:

答案 0 :(得分:1)

您的代码存在两个问题:

  1. analysisclassA.__init__classA.doingstuff函数的本地变量。如果您希望在其他功能中重复使用它,则应将其定义为属性:self.analysis = classB(self)

  2. 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更改时都会调用它。