8
私は少しPythonのプロパティについて混乱しています。それは、自分自身にAのプロパティをマップするためにゲッターとセッターを使用していますA.のラッパーのようなもの(もちろん1を継承経由でそれを行うにもできる)である必要があり、次のコードpythonプロパティgetter/setter confusion
class A:
@property
def N(self):
print("A getter")
return self._N
@N.setter
def N(self,v):
print("A setter")
self._N = v
def __init__(self):
self._N = 1
class B:
@property
def N(self):
print("B getter")
return self.a.N
@N.setter
def N(self,v):
print("B setter")
self.a.N = v
def __init__(self):
self.a = A()
if __name__ == '__main__':
b=B()
b.N = 2
print(b.N, b.a.N)
b.N = 3
print(b.N, b.a.N)
Bを考えてみましょう。
> python2 test.py
A getter
(2, 1)
A getter
(3, 1)
> python3 test.py
B setter
A setter
B getter
A getter
A getter
2 2
B setter
A setter
B getter
A getter
A getter
3 3
は私が間違って何をやっているか、場所を正確に問題がある: 問題は、それがのpython3にしながらのpython2.6に予想通り、それは単に動作しないということ、ありますか?
あなたが正しいです、それはそれを解決しますが、私はどうにかここで間違っていることを理解していません。 – buergi
@buergi旧式のクラスは記述子を持つことができません。 '@ property'は記述子です。 [Pythonデータモデルのリファレンス]の詳細(http://docs.python.org/reference/datamodel.html) – reclosedev