看板 Python 關於我們 聯絡資訊
※ 引述《sandwichC (沒回應=掛站)》之銘言:
timTan:大推,其待整理成完整文章 05/08 00:33
timTan:不過間接呼較也太折磨人了 05/08 00:34
timTan:錯字...呼叫! 05/08 00:35
其實改用 property decorator 就可以防呆了 沿用之前的例子, 改用 decorator (1) Subclass 複寫了 getter 的 method, 卻沒有把它變成 property class Foo(object): @property def var(self): return 10 class Bar(Foo): def var(self): return 20 bar = Bar() print bar.var # <bound method Bar.var of <__main_.Bar object ... # Obviously doesn't make sense (2) 使用間接呼叫 class Foo(object): def _get_var(self): return 10 @property def var(self): return self._get_var() class Bar(Foo): def _get_var(self): return 20 bar = Bar() print bar.var # 20 (3) Subclass 也加上 property class Foo(object): @property def var(self): return 10 class Bar(Foo): @property def var(self): return 20 bar = Bar() print bar.var # 20 使用新的 decorator 只要注意一件事情 就是 override property method 時也要放 decorator 其實舊方法也是一樣 只要在 override 時重新產生 property(方法三)基本上就 OK 如果你只想複寫 getter/setter/deleter 其中之一時, 舊方法會有點醜 不過做這種事情通常也不太合理 -- ╱ ̄ ̄ ̄╲ ▏◢█◣ 成龍表示: 是喔... ′/ ‵ ╰╯ ψQSWEET █◤ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.81.146 ※ 編輯: uranusjr 來自: 114.32.81.146 (05/08 01:48)
timTan:這樣寫的話的確簡單且直覺多了~ 05/09 20:34