Anulando __setattr__ en tiempo de ejecución
Estoy tratando de anular el__setattr__
Método de una clase de Python, ya que quiero llamar a otra función cada vez que un atributo de instancia cambia su valor. Sin embargo, no quiero este comportamiento en el__init__
Método, porque durante esta inicialización establezco algunos atributos que se utilizarán más adelante:
Hasta ahora tengo esta solución, sin anular__setattr__
en tiempo de ejecución:
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)
Sin embargo, me gustaría evitar estosobject.__setattr__(...)
y anular__setattr__
al final de__init__
método:
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)
Lo he intentado conself.__dict__['__setitem__'] = self.aux
yobject.__setitem__['__setitem__'] = self.aux
, pero ninguno de estos intentos tiene efecto. he leídoEsta sección de la referencia del modelo de datos., pero parece que la asignacion del propio__setattr__
es un poco complicado
¿Cómo podría ser posible anular__setattr__
al final de__init__
, o al menos tener una solución pitónica donde__setattr__
Se llama de la forma normal solo en el constructor?