W klasie B poniżej chciałem wywołać funkcję __set__
w klasie A za każdym razem, gdy przypisano wartość do B().a
. Zamiast tego ustawienie wartości na B().a
powoduje zastąpienie wartości B().a
. Przypisanie klasy C do C().a
działa poprawnie, ale chciałem mieć oddzielną instancję klasy A dla każdej klasy użytkownika, tj. Nie chcę zmieniać "a" w jednym wystąpieniu C(), aby zmienić "a" we wszystkich innych instancjach. Napisałem kilka testów, aby pomóc zilustrować problem. Czy możesz mi pomóc zdefiniować klasę, która przejdzie zarówno test1, jak i test2?Dlaczego deklarowanie klasy deskryptorów w funkcji __init__ powoduje przerwanie działania deskryptora?
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, mogę z tym żyć – user83753
Po krótkiej myśli, może nie mogę z tym żyć. W mojej aplikacji chcę umieścić funkcje składowe w A, które również zależą od stanu klasy właściciela. Na przykład: Właściciel (informacja o stanie) Owner.a = dane Owner.a.foo() W jaki sposób foo otrzymuje informacje o stanie od właściciela? – user83753
@unknown (google): oh, ponieważ przechowujesz dane na samej instancji. Możesz więc pobrać go z metod. – nosklo