出于某种原因,我需要能够删除所有由类的某种方法产生的子项(在某种意义上(。下面是一个示例:
class A():
def __init__(self):
self.a_val = 56
self.children = list()
def __del__(self):
del self.children
def gen_b(self):
return B(self.a_val)
class B():
def __init__(self, val):
self.a_val = val
self.b_val = 87
我想要的是以某种方式将生成的类 B 从gen_b
附加到A().children
,以便:
a_class = A()
b_generated = a_class.gen_b()
del a_class
# b_generated is also deleted
此外,我需要这个用于cython(我使用cdef类(,所以也许有一些解决方案与__dealloc__
或其他Cython特定的符号。所有解决方案都将不胜感激。
我想要的是以某种方式将生成的类 B 从 gen_b 附加到 A((.children
只需在返回新元素之前存储它,您就可以对它做任何您想做的事情 - 包括添加到子元素
def gen_b(self):
b = B(self.a_val)
self.children.append(b)
return b
至于del
...请阅读 del 的实际工作。最重要的部分是:
会删除该名称的绑定
因此,如果您这样做,例如
>>> a_class = A()
>>> a2 = a_class
>>> del a_class
A2 仍然会工作并针对相同的元素(因为它拥有与a_class
相同的引用(。del
只是删除名称,而不是对象本身。
您需要一种不同的方法来删除这些元素。