[問題] property override的困擾
最近在學習Python,碰到 setter 與 getter override的困擾
首先以下是 Parent 的設定
class Parent():
@property
def foo(self):
return self._bar
@foo.setter
def foo(self, foo):
self._bar = foo
然後是繼承者Child
class Child(Parent):
def getFoo(self):
return "Overrides:"+super().foo
def setFoo(self, foo):
self._bar = ' '.join(['Child\'s foo:', foo])
foo=property(getFoo,setFoo)
用以下程式測試
child = Child()
child.foo="Hello World"
print(child.foo)
取得預期的結果:
Overrides:Child's foo: Hello World
以下只Override setter
class Child(Parent):
@Parent.foo.setter
def foo(self, foo):
self._bar = ' '.join(['Child\'s foo:', foo])
或是只Override getter
class Child(Parent):
@Parent.foo.getter
def foo(self):
return "Override getter:"+self._bar
也都可以得到預期的結果
但是組合起來後
class Child(Parent):
@Parent.foo.getter
def foo(self):
return "Override getter:"+self._bar
@Parent.foo.setter
def foo(self, foo):
self._bar = ' '.join(['Child\'s foo:', foo])
卻只得到
Child's foo: Hello World
有先進可以解惑嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.33.241.207
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1439953677.A.1AE.html
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):