在Python中使用属性的deleter decorator
我正在用Python处理属性,我想知道@propertyName.deleter decorator是如何工作的。我可能遗漏了什么,我无法通过谷歌找到清晰的答案 我希望实现的是,当调用此删除器行为时,我可以触发其他操作(例如:使用我的3d应用程序SDK) 目前,似乎没有触发一个简单的print() 当我使用del(instance.property)删除属性时,是否触发了deleter 否则,我如何才能做到这一点在Python中使用属性的deleter decorator,python,properties,decorator,Python,Properties,Decorator,我正在用Python处理属性,我想知道@propertyName.deleter decorator是如何工作的。我可能遗漏了什么,我无法通过谷歌找到清晰的答案 我希望实现的是,当调用此删除器行为时,我可以触发其他操作(例如:使用我的3d应用程序SDK) 目前,似乎没有触发一个简单的print() 当我使用del(instance.property)删除属性时,是否触发了deleter 否则,我如何才能做到这一点 class M(): def __init__(self):
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)
非常感谢(:让我成为一个新型的班级:
class M(object):
见:
属性不适用于classic
类,但您没有获得明确的
尝试此操作时出错。获取
方法将被调用,看起来是这样的
工作,但取决于属性
赋值,一个经典的类实例
只需在其
dict而不调用属性的set方法,然后,
属性的get方法将不可用
两个都打过电话。(你可以覆盖。)
setattr来修复此问题,但其成本将高得令人望而却步。)
在Python3中,您将看到
print
的结果,然后是最后一次打印的AttributeError(因为\u m
已消失)。您可能正在使用Python2.6,在这种情况下,您需要将class
子句更改为class m(object):
创建M
新样式,然后您将获得与Python 3相同的行为