繁体   English   中英

删除装饰器使用Python中的属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM