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

Cannot overwrite object attributes within associated object

我有一个具有某些属性的控制器 class。此 class 中的属性有时可能必须用存储在数据库中的值覆盖。不幸的是,我遇到了一个解决 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

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

正在发生的事情是,当您将控制器 class 中的项目实例传递给寄存器 class 时,它没有发生变化,但是寄存器 class 中的项目已发生变化,并且此变化没有被遍历到控制器 class 并且绕过它的方法是做这样的事情

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

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

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