删除类方法python生成的所有变量(类)

Iva*_*kin 5 python cython

由于某种原因,我需要能够删除从某种方法中派生的所有子级(在某种意义上)。这是一个例子:

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
Run Code Online (Sandbox Code Playgroud)

我想要的是以某种方式将生成的类B从追加gen_bA().children

a_class = A()
b_generated = a_class.gen_b()
del a_class
# b_generated is also deleted
Run Code Online (Sandbox Code Playgroud)

另外,对于cython,我需要使用它(我使用cdef类),因此,也许有些解决方案__dealloc__或其他Cython特定的符号。所有解决方案将不胜感激。

h4z*_*4z3 5

我想要的是以某种方式将生成的类 B 从 gen_b 附加到 A().children

只需在返回新元素之前存储它,您就可以用它做任何您想做的事情 - 包括添加到子元素

    def gen_b(self):
        b = B(self.a_val)
        self.children.append(b)
        return b
Run Code Online (Sandbox Code Playgroud)

至于del...请阅读 del 实际上做了什么。最重要的部分是:

删除名称会移除该名称的绑定

所以如果你这样做

>>> a_class = A()
>>> a2 = a_class
>>> del a_class
Run Code Online (Sandbox Code Playgroud)

a2 仍然可以工作并定位相同的元素(因为它拥有与之前相同的引用a_class)。del仅删除名称,而不删除对象本身。

您需要采用不同的方法来删除这些元素。