0

在这个例子中:

class Foo(object):
    def __del__(self):
        print "Foo died"

class Bar(object):
    def __init__(self):
        self.foo = Foo()
        self.baz = Baz(self)

class Baz(object):
    def __init__(self, bar):
        self.bar = bar

b = Bar()

我希望尽管 Bar 和 Baz 之间存在循环,但仍会调用 Foo 析构函数,因为 Foo 没有对收集它们的任何 bar 或 baz 的引用,并且在收集 Foo 之前减少引用计数应该是完全安全的。为什么 python 不这样做呢?如果可以防止析构函数被其他类的完全不相关的动作调用,那么析构函数怎么可能有用呢?

4

1 回答 1

1

请注意,当解释器退出时不需要调用析构函数。

快速修改您的脚本,一切都按您的预期工作:

class Foo(object):
    def __del__(self):
        print "Foo died"

class Bar(object):
    def __init__(self):
        self.foo = Foo()
        self.baz = Baz(self)

class Baz(object):
    def __init__(self, bar):
        self.bar = bar

b = Bar()

del b
于 2013-01-31T14:32:58.760 回答