gpt4 book ai didi

python - 删除实例时删除属性

转载 作者:行者123 更新时间:2023-11-30 23:59:40 25 4
gpt4 key购买 nike

A类: def __get( self ): 返回 self ._x

 def __set(self, y):
self._x = y

def __delete_x(self):
print('DELETING')
del self._x

x = property(__get,__set,__delete_x)

b = A()

# Here, when b is deleted, i'd like b.x to be deleted, i.e __delete_x()
# called (and for immediate consequence, "DELETING" printed)
del b

最佳答案

del 语句的语义并不能真正满足您的需求。 del b simple 从本地作用域框架/字典中删除对刚刚实例化的 A 对象的引用;这不会直接导致对对象本身执行任何操作。如果这是对该对象的最后一次引用,则引用计数降至零,或者垃圾收集器收集一个周期,可能会导致该对象被释放。您可以通过向对象添加 __del__ 方法或添加 weakref 来观察这一点。执行所需操作的回调。

不过,后两种解决方案似乎都不是一个好主意; __del__ 方法阻止垃圾收集器收集涉及该对象的任何循环;虽然弱引用不会遇到这个问题,但在任何一种情况下,您都可能在一个奇怪的环境中运行(例如在程序关闭期间),这可能会使您难以完成您想要完成的事情。

如果您可以扩展您的确切用例,则可能有一种完全不同的方法来实现您期望的最终目标,但很难根据这样一个普遍且有限的示例进行推测。

关于python - 删除实例时删除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181016/

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