[英]deleter decorator using Property in Python
我正在使用Python中的属性,我想知道这个@ propertyName.deleter装饰器是如何工作的。 我可能错过了一些东西,我找不到谷歌的明确答案。
我想要实现的是当调用此删除行为时,我可以触发其他操作(例如:使用我的3d应用程序SDK)。
现在只是一个简单的print()似乎没有被触发。
当我使用德尔(instance.property)删除属性缺失者开除?
否则,我该怎样才能做到这一点?
class M():
def __init__(self):
self._m = None
@property
def mmm(self):
return self._m
@mmm.setter
def mmm(self, val):
self._m = val
@mmm.deleter
def mmm(self):
print('deleting') # Not printing
del(self._m)
if __name__ == '__main__':
i = M()
i.mmm = 150
print(i.mmm)
del(i.mmm)
print(i.mmm)
非常感谢你 (:
让M成为一个新风格的课程:
class M(object):
见http://www.python.org/download/releases/2.2.3/descrintro/#property :
属性不适用于经典类 ,但尝试此操作时不会出现明显错误。 您的get方法将被调用,因此它似乎可以工作,但是在属性赋值时,经典类实例将简单地在其dict中设置值而不调用属性的set方法,之后,将不会调用属性的get方法无论是。 (你可以覆盖setattr来解决这个问题,但这会非常昂贵。)
在Python 3中,您将看到print
的结果 - 然后是最后一次打印的AttributeError(因为_m
已经消失)。 您可能正在使用Python 2.6,在这种情况下,您需要将class
子句更改为class M(object):
使M
新样式,然后您将获得与Python 3中相同的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.