无法覆盖关联对象中的对象属性

时间:2019-01-15 17:31:13

标签: python associations relation

我有一个具有某些属性的控制器类。有时可能必须用存储在数据库中的值覆盖此类中的属性。不幸的是,我遇到了一个问题,该问题解决了我猜OOP中一个非常基本的问题,所以我真的很想了解自己在做错什么,而不是编写解决方法。

我的实际代码当然要大得多,但是接下来的简化应该可以真正显示问题。

class Project():
    def __init__(self):
        self.beams = 10

class Controller():
    def __init__(self):
         self.project = Project()

    def proc(self):
        self.r = Register(self.project)
        self.r.load()

class Register():
    def __init__(self, project):
         self.project = project

    def load(self):
        p2 = Project()
        p2.beams = 5

        self.project = p2
        # self.project.beams = 4

c = Controller()
print(c.project.beams)

c.proc()
c.r.load()

print(c.project.beams)

预期结果:

10
5

我得到的是什么

10
10

请注意,当我使用带注释的行self.project.beams = 4时,结果是:

10
4

显然,我无法覆盖寄存器类中的project属性,但为什么不呢?

1 个答案:

答案 0 :(得分:0)

发生的事情是,当您将其传递给Register类时,控制器类中的项目实例未更改,但是Register类中的项目已更改,并且此更改没有遍历到Controller类,并且解决了该问题。做这样的事情

class Controller():
    def __init__(self):
         self.project = Project()

    def proc(self):
        self.r = Register(self.project)
        self.r.load()
        self.project = self.r.project

这给了我想要的输出,我不知道任何其他要求,但这就是我继续前进的方式。