由于某种原因,我必须能够删除由该类的某些方法所产生的所有子级(在某种意义上)。这是一个示例:
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特定符号的解决方案。所有解决方案将不胜感激。
答案 0 :(得分:4)
我想要以某种方式将生成的类B从gen_b追加到A()。children
只需在返回新元素之前将其存储,您就可以对它进行任何操作-包括添加到子元素
def gen_b(self):
b = B(self.a_val)
self.children.append(b)
return b
关于del
...请read what del actually does。最重要的部分是:
删除名称会删除该名称的绑定
因此,如果您这样做,例如
>>> a_class = A()
>>> a2 = a_class
>>> del a_class
a2仍然可以工作并以相同的元素为目标(因为它拥有与a_class
相同的引用)。 del
只是删除名称,而不是对象本身。
您将需要其他方法来删除这些元素。