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

时间:2019-09-24 09:02:21

标签: 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

我想要以某种方式将生成的类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特定符号的解决方案。所有解决方案将不胜感激。

1 个答案:

答案 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只是删除名称,而不是对象本身。

您将需要其他方法来删除这些元素。