Re: [問題] property override的困擾
※ 引述《kentyeh (kent)》之銘言:
: 最近在學習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
: 有先進可以解惑嗎?
首先來個線上跑扣頁面
http://goo.gl/0G1JFE
重點已經註解在扣裡面了,搭配測試結果應該很容易了解。
其實需要知道的只是 decorator 不過是一種 syntactic sugar,下面這兩段扣
意思是一樣的。
#1
@property
def foo(self):
return self._foo
#2
def foo(self):
return self._foo
foo = property(foo)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.234.217.60
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1439966089.A.3D4.html
推
08/19 17:23, , 1F
08/19 17:23, 1F
→
08/19 17:24, , 2F
08/19 17:24, 2F
→
08/19 23:52, , 3F
08/19 23:52, 3F
→
08/19 23:53, , 4F
08/19 23:53, 4F
→
08/19 23:54, , 5F
08/19 23:54, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章