gpt4 book ai didi

python - Python 中的自定义析构函数

转载 作者:行者123 更新时间:2023-12-01 22:05:08 24 4
gpt4 key购买 nike

假设我有两个类:

class Container():
def __init__(self, name):
self.name = name

class Data():
def __init__(self):
self._containers = []

def add_container(self,name):
self._containers.append(name)
setattr(self, name, Container(name))

现在说

myData = Data()
myData.add_container('contA')

现在,如果我执行 del myData.contA,它当然不会从 myData._containers 中删除 name

那么我该如何在 Container 中编写一个析构函数,以便它删除属性,同时从 _containers 列表中删除名称?

最佳答案

您似乎已经习惯了一种具有确定性对象销毁和执行该销毁的专用方法的语言。 Python 不是那样工作的。 Python 没有析构函数,即使它有析构函数,也不能保证 del myData.contA会使 Container 对象符合销毁条件,更不用说实际销毁它了。

可能最简单的方法就是定义一个 remove_container平行于你的 add_container :

def remove_container(self, name):
self._containers.remove(name)
delattr(self, name)

如果你真的希望这个操作的语法是del myData.contA ,然后通过实现 __delattr__ Hook 属性删除在 Data :

def __delattr__(self, name):
self._containers.remove(name)
super().__delattr__(name)

关于python - Python 中的自定义析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52391850/

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