In Klasse B unten wollte ich die __set__
Funktion in Klasse A aufgerufen werden, wenn Sie B().a
einen Wert zuweisen. Stattdessen wird durch Setzen eines Werts auf B().a
der Wert B().a
überschrieben. Klasse C, die C().a
zuweist, funktioniert ordnungsgemäß, aber ich wollte eine separate Instanz von A für jede Benutzerklasse haben, d. H. Ich möchte nicht 'a' in einer Instanz von C() ändern, um 'a' in allen anderen Instanzen zu ändern. Ich habe ein paar Tests geschrieben, um das Problem zu veranschaulichen. Kannst du mir helfen, eine Klasse zu definieren, die Test1 und Test2 besteht?Warum wird durch die Deklaration einer Deskriptorklasse in der Funktion __init__ die Deskriptorfunktionalität unterbrochen?
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, ich kann damit leben – user83753
Auf den zweiten Gedanken, vielleicht kann ich damit nicht leben. In meiner Anwendung möchte ich Member-Funktionen in A setzen, die auch vom Zustand der Owner-Klasse abhängen. So zum Beispiel: Besitzer (State Info) Owner.a = Daten Owner.a.foo() Wie erhält Foo die Statusinformationen von Besitzer? – user83753
@unknown (google): Oh, dafür speichern Sie die Daten auf der Instanz selbst. So können Sie es von den Methoden holen. – nosklo