Mam klasę, która śledzi kilka innych klas. Każda z tych pozostałych klas musi mieć dostęp do wartości konkretnej zmiennej, a każda z tych innych klas musi także być w stanie zmodyfikować tę konkretną zmienną, tak aby wszystkie inne klasy mogły zobaczyć zmienioną zmienną.Python Object Property Sharing
Próbowałem tego dokonać przy użyciu właściwości. Przykładem jest następująca:
class A:
def __init__(self, state):
self._b_obj = B(self)
self._state = state
@property
def state(self):
return self._state
@state.setter
def state(self,val):
self._state = val
@property
def b_obj(self):
return self._b_obj
@b_obj.setter
def b_obj(self,val):
self._b_obj = val
class B:
def __init__(self, a_obj):
self.a_obj = a_obj
@property
def state(self):
return self.a_obj.state
@state.setter
def state(self,val):
self.a_obj.state = val
chcę go do pracy w następujący sposób:
>>> objA = A(4)
>>> objB = objA.b_obj
>>> print objA.state
4
>>> print objB.state
4
>>> objA.state = 10
>>> print objA.state
10
>>> print objB.state
10
>>> objB.state = 1
>>> print objA.state
1
>>> print objB.state
1
Wszystko działa jak chcę go z wyjątkiem ostatnich 3 komend. Podają:
>>> objB.state = 1
>>> print objA.state
10
>>> print objB.state
1
Dlaczego ostatnie 3 polecenia zwracają te wartości? Jak mogę to naprawić, aby zwracać pożądane wartości?
Dzięki
Way zadać naprawdę dobrze przemyślane, szczegółowe, konkretne pytanie zarówno z oczekiwanego i obserwowanego zachowania tylko na swojej 2nd pytanie do serwisu. Bardzo dobrze zrobione. :) –
Sidenote: Jeśli korzystasz z Python27, twoje klasy powinny dziedziczyć "obiekt". I tak, zgodził się z @ g.d.d.c, bardzo dobrze napisane pytanie. – aneroid
Aby zapewnić dodatkowy kontekst do opublikowanego aneroidu. Oto dokumentacja klas New Style dla Pythona 2.7: https://www.python.org/doc/newstyle/ – idjaw