无法覆盖关联对象中的对象属性
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
这给了我想要的输出,我不知道任何其他要求,但这就是我前进的方式。
我有一个具有某些属性的控制器 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
这给了我想要的输出,我不知道任何其他要求,但这就是我前进的方式。