Nella classe B di seguito volevo che la funzione __set__
in classe A venisse chiamata ogni volta che si assegna un valore a B().a
. Invece, impostando un valore su B().a
si sovrascrive con il valore B().a
. La classe C che assegna a C().a
funziona correttamente, ma volevo avere un'istanza separata di A per ogni classe utente, cioè non voglio cambiare 'a' in un'istanza di C() per cambiare 'a' in tutte le altre istanze. Ho scritto un paio di test per aiutare a illustrare il problema. Puoi aiutarmi a definire una classe che supererà sia test1 che test2?Perché dichiarare una classe descrittore nella funzione __init__ interrompe la funzionalità del descrittore?
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, posso conviverci con quello – user83753
Ripensandoci, forse non posso vivere con quello. Nella mia applicazione voglio inserire funzioni membro in A che dipendono anche dallo stato della classe del proprietario. Ad esempio: Proprietario (informazioni di stato) Proprietario.a = dati Owner.a.foo() Come si può ottenere le informazioni di stato dal proprietario? – user83753
@unknown (google): oh, per questo si memorizzano i dati sull'istanza stessa. Quindi puoi recuperarlo dai metodi. – nosklo