У меня есть класс контроллера, который имеет некоторые атрибуты. Атрибуты в этом классе иногда могут быть перезаписаны значениями, хранящимися в базе данных. К сожалению, я столкнулся с проблемой, которая решает довольно фундаментальную проблему в ООП, я думаю, поэтому я действительно хотел бы понять, что я делаю неправильно, вместо того, чтобы писать обходной путь.
Мой реальный код, конечно, намного больше, но следующее упрощение действительно должно показать проблему.
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
в классе регистров, но почему бы и нет?