gpt4 book ai didi

python - 当 `fdel` 被覆盖时,不会调用属性的 `__delattr__` 方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:59:39 25 4
gpt4 key购买 nike

我有一个这样的类,我在其中声明了一个属性 x,并覆盖了 __delattr__:

class B(object):
def __init__(self, x):
self._x = x
def _get_x(self):
return self._x
def _set_x(self, x):
self._x = x
def _del_x(self):
print '_del_x'

x = property(_get_x, _set_x, _del_x)

def __delattr__(self, name):
print '__del_attr__'

现在当我运行的时候

   b = B(1)
del b.x

只有 __del_attr__ 被调用,有人知道为什么以及如何解决这个问题吗?

最佳答案

你必须调用你祖先的 __delattr__ 才能正确实现这一点。

class B(object): 
.....

def __delattr__(self, name):
print '__del_attr__'
super(B, self).__delattr__(name) # explicit call to ancestor (not automatic in python)

然后运行:

b = B(1)
del b.x

将输出:

__del_attr__
_del_x

关于python - 当 `fdel` 被覆盖时,不会调用属性的 `__delattr__` 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6745390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com