Переопределение __setattr__ во время выполнения
Я пытаюсь переопределить__setattr__
метод класса Python, так как я хочу вызывать другую функцию каждый раз, когда атрибут экземпляра меняет свое значение. Однако я не хочу, чтобы такое поведение__init__
метод, потому что во время этой инициализации я установил некоторые атрибуты, которые будут использоваться позже:
Пока у меня есть это решение, без переопределения__setattr__
во время выполнения:
class Foo(object):
def __init__(self, a, host):
object.__setattr__(self, 'a', a)
object.__setattr__(self, 'b', b)
result = self.process(a)
for key, value in result.items():
object.__setattr__(self, key, value)
def __setattr__(self, name, value):
print(self.b) # Call to a function using self.b
object.__setattr__(self, name, value)
Тем не менее, я хотел бы избежать этихobject.__setattr__(...)
и переопределить__setattr__
в конце__init__
метод:
class Foo(object):
def __init__(self, a, b):
self.a = a
self.b = b
result = self.process(a)
for key, value in result.items():
setattr(self, key, value)
# override self.__setattr__ here
def aux(self, name, value):
print(self.b)
object.__setattr__(self, name, value)
Я пробовал сself.__dict__['__setitem__'] = self.aux
а такжеobject.__setitem__['__setitem__'] = self.aux
, но ни одна из этих попыток не имеет эффекта. я прочиталэтот раздел ссылки на модель данных, но похоже на присвоение собственного__setattr__
это немного сложно.
Как можно было переопределить__setattr__
в конце__init__
или, по крайней мере, есть питонное решение, где__setattr__
нормальным образом вызывается только в конструкторе?