新旧样式类中的Python析构函数

新旧样式类中的Python析构函数,第1张

概述参见英文答案 > Why do new style class and old style class have different behavior in this case?                                    1个我试图理解为什么对象破坏在新风格类中与旧风格类相比有不同的作用.class Wrapper():

参见英文答案 > Why do new style class and old style class have different behavior in this case?                                    1个
我试图理解为什么对象破坏在新风格类中与旧风格类相比有不同的作用.

class Wrapper():    class Inner(object):        def __del__(self):            print 'Inner destructor'    innerInstance = Inner()    def __del__(self):        print 'Wrapper destructor'if __name__ == '__main__':    x = Wrapper()

在退出时,这将输出:

Wrapper destructorInner destructor

但是,如果我使用Wrapper作为新的样式类,则只调用包装器析构函数,输出为:

Wrapper destructor

有人可以解释上面显示的行为吗?最佳答案python data model明确指出:

It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits.

在这种情况下,解释器退出时仍然存在Wrapper(类和实例)对象,因此无法保证它将被最终确定.即使我们看到Wrapper实例已经完成,也没有保证Wrapper类将被最终确定(这就是持有你的Inner实例).

作为旁注,如果我使用Jython运行此代码,则不会为任一对象调用__del__(无论我们是使用旧式还是新式类).令人惊讶的是,如果我明确地删除了对象,它甚至不起作用(使用Jython)(但是这个代码适用于@R_419_6992@thon,无论旧式/新式):

class Wrapper():    class Inner(object):        def __del__(self):            print 'Inner destructor'    innerInstance = Inner()    def __del__(self):        print 'Wrapper destructor'if __name__ == '__main__':    print "foo"    x = Wrapper()    print "bar"    del x    del Wrapper
总结

以上是内存溢出为你收集整理的新旧样式类中的Python析构函数全部内容,希望文章能够帮你解决新旧样式类中的Python析构函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存