【发布时间】:2016-10-17 13:54:24
【问题描述】:
我主要在 C++ 中做事,其中析构函数实际上是为了销毁获取的资源。最近我开始使用python(这真的很有趣而且很棒),我开始学习它有像java一样的GC。 因此,没有过多强调对象所有权(构造和销毁)。
据我所知,__init__() 方法在 python 中对我来说比在 ruby 中更有意义,但是__del__() 方法,我们真的需要在我们的班级?如果我错过__del__(),我的班级会缺少什么吗?我可以看到__del__() 有用的一个场景是,如果我想在销毁对象时记录一些东西。除了这个还有别的吗?
【问题讨论】:
-
没有。你几乎不应该实现
__del__。 -
你几乎从不想要实现
__del__。提供自定义__del__的类在处理循环时必须由 GC 以特殊方式处理(因为__del__必须只调用一次)并且在某些情况下 GC 将无法收集它们 [虽然从 python3.4+ 这已经改进了很多]。在极少数情况下实施它是个好主意。 -
如果你是 python 的初学者,你应该跳过
__del__函数直到很久以后。真的很少需要。 -
顺便说一下,你可能有兴趣阅读PEP 442: Safe Object Finalization
标签: python