私は他のいくつかのクラスを追跡するクラスを持っています。これらの他のクラスはそれぞれ、特定の変数の値にアクセスする必要があり、これらの他のクラスのうちのいずれか1つは、この特定の変数を変更して、他のすべてのクラスが変更された変数を見ることができるようにする必要があります。Pythonオブジェクトのプロパティの共有
これをプロパティを使用して実行しようとしました。次のように例を示します。
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
私は次のように仕事をしたい:私はそれが最後の3つのコマンドを除くたいと
>>> 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
すべてが動作します。彼らは与える:
>>> objB.state = 1
>>> print objA.state
10
>>> print objB.state
1
なぜこれらの値を最後の3つのコマンドが返すのですか?どのように私はこれを修正して、彼らが希望の値を返すことができますか?
おかげ
ウェイ。非常によくやりました。 :) –
Sidenote:Python27を使用している場合、クラスは 'object'を継承する必要があります。そしてはい、@ g.d.d.c、非常によく書かれた質問に同意した。 – aneroid
アネロイドが投稿した内容に追加のコンテキストを提供する。 Python 2.7用の新しいスタイルクラスに関するドキュメントは次のとおりです:https://www.python.org/doc/newstyle/ – idjaw