假设我有两节课:
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
,当然不会name
从中删除myData._containers
。
那么,我该如何写一个析构函数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__
on来挂接属性删除Data
:
def __delattr__(self, name):
self._containers.remove(name)
super().__delattr__(name)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句