我有一个具有某些属性的控制器类。有时可能必须用存储在数据库中的值覆盖此类中的属性。不幸的是,我遇到了一个问题,该问题解决了我猜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
属性,但为什么不呢?
答案 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
这给了我想要的输出,我不知道任何其他要求,但这就是我继续前进的方式。