代码之家  ›  专栏  ›  技术社区  ›  Wayne Werner

在python 2.x中,我应该调用object?

  •  3
  • Wayne Werner  · 技术社区  · 15 年前

    在Python3.x中,所有类都是 object . 在2.x中,必须明确声明 class MyClass(object) . 而且,当我试图编写尽可能多的3.x兼容代码时,我正在子类化 对象 .

    在我的程序中,我使用 __del__ 方法,我想知道我是否应该打电话给 object.__del__(self) ,或者如果那是魔法般的处理?

    谢谢, 韦恩

    编辑: 我的意思似乎有些混乱——在文件中它说:

    如果基类有 __del__() 方法,派生类 __德尔库() 方法(如果有)必须显式调用它,以确保正确删除实例的基类部分。

    所以我想知道我是否需要:

    def __del__(self):
        object.__del__(self)
    

    或者其他合适的选择。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Thomas K    15 年前

    好, object 实际上没有 __del__ 方法,所以不,不需要调用它。

    >>> object().__del__
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'object' object has no attribute '__del__'
    
        2
  •  4
  •   efritz    15 年前

    __del__ 不该被叫来的。当对象没有更多的引用并被收集时,析构函数将自动执行。

    相反,你不会打电话 __init__ ,但在创建对象时会自动处理。打电话 __德尔__ 不会破坏对象,这样做实际上可能会导致意外行为。

        3
  •  4
  •   tkerwin    15 年前

    支票 http://docs.python.org/reference/datamodel.html#basic-customization http://docs.python.org/library/gc.html#module-gc . 你不需要打电话给 __del__ 方法,因为垃圾回收器应该为您执行此操作。写一个正确的 __德尔__ 方法和python将为您处理它。