[问题] @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