[問題] @property

作者: tsaiminghan (tsaiminghan)   2019-07-26 14:44:29
我在class中使用@property, 但是log不會印,應該沒有被呼叫到
問題看起來跟tkinter.Frame有關,使用class item(object)就
可以正常使用,請問不會動的原因和該如何修改?謝謝
(使用python2.7)
class item(tkinter.Frame):
@property
def level(self):
print 'get property level'
return self._level
@level.setter
def level(self, value):
print 'set property level:', value
self._level = value
作者: somoskylin (八七booboo)   2019-07-26 15:33:00
他不是函式吧……
作者: tsaiminghan (tsaiminghan)   2019-07-26 15:59:00
我改一下,總之就是不會被叫到
作者: yushes920179 (樂冰)   2019-07-26 18:49:00
撞名了?
作者: s860134 (s860134)   2019-07-26 23:04:00
最粗淺的原因是因為 tkinter.Frame 沒有繼承到 object也就是他是所謂的 old-style/classic classes實際上是 item 和他的父類別都找不到 __setattr__item 的實例就會把 instance.__dict__ 裡面加上 "level"
作者: thefattiger (LT)   2019-07-27 00:59:00
不要再用Python2了
作者: s860134 (s860134)   2019-07-27 11:23:00
目前想到的方法 1. 複寫 item class __setattr__2. 直接讓 item 用多重繼承 object...不過 2. 會有甚麼副作用 可能要看一下多重繼承XD剛看了一下: 文件上有寫: https://bit.ly/2Y8jIjX看這個第二段的最後一句: "Note that descriptors are""only invoked for new style objects or classes"所以你要做的事情,要嘛讓他是隻鴨子,或是讓他像隻鴨子
作者: tsaiminghan (tsaiminghan)   2019-07-27 18:46:00
謝謝,我會用settatr去試試看。

Links booklink

Contact Us: admin [ a t ] ucptt.com