En la clase B a continuación, quería llamar a la función __set__
en la clase A siempre que asigne un valor a B().a
. En cambio, establecer un valor en B().a
sobrescribe B().a
con el valor. La asignación de Clase C a C().a
funciona correctamente, pero quería tener una instancia separada de A para cada clase de usuario, es decir, no quiero cambiar 'a' en una instancia de C() para cambiar 'a' en todas las demás instancias. Escribí un par de pruebas para ayudar a ilustrar el problema. ¿Pueden ayudarme a definir una clase que pase tanto test1 como test2?¿Por qué declarar una clase de descriptor en la función __init__ rompe la funcionalidad del descriptor?
class A(object):
def __set__(self, instance, value):
print "__set__ called: ", value
class B(object):
def __init__(self):
self.a = A()
class C(object):
a = A()
def test1(class_in):
o = class_in()
o.a = "test"
if isinstance(o.a, A):
print "pass"
else:
print "fail"
def test2(class_in):
o1, o2 = class_in(), class_in()
if o1.a is o2.a:
print "fail"
else:
print "pass"
OK, puedo vivir con eso – user83753
Pensándolo bien, tal vez no pueda vivir con eso. En mi aplicación, quiero poner funciones de miembro en A que también dependen del estado de la clase propietaria. Por ejemplo: Propietario (información del estado) Propietario.a = datos Propietario.a.foo() ¿Cómo obtiene foo la información de estado del propietario? – user83753
@unknown (google): ah, para eso almacena los datos en la instancia en sí. Entonces puedes buscarlo desde los métodos. – nosklo