在实例之前删除类:强制删除顺序?

时间:2016-05-02 13:40:01

标签: python-3.x garbage-collection destructor

当我遇到使用垃圾收集器进行实例/类清理的一点问题时,我试图处理@classmethod@staticmethod

class A:
    count = 0

    def __init__(self, x):
        A.count += 1
        self.x = x
        print("A instance created :")
        A.class_foo()

    def __del__(self):
        print("destructor :")
        print("A instance (%d) deleted :" % self.x)
        A.count -= 1
        A.class_foo()

    @classmethod
    def class_foo(cls):
        print("Class A count : " + str(cls.count))

if __name__ == "__main__":
    a1 = A(1)
    a2 = A(2)
    del a1
    #del a2

运行以下代码时,我得到以下内容:

$ python test.py
A instance created :
Class A count : 1
A instance created :
Class A count : 2
destructor :
A instance (1) deleted :
Class A count : 1
destructor :
A instance (2) deleted :
Exception AttributeError: "'NoneType' object has no attribute 'count'" in <bound method A.__del__ of <__main__.A instance at 0x1067fe098>> ignored

当垃圾收集器删除剩余的实例时,看起来A不再存在。

有没有办法强制垃圾收集器使用的删除顺序?或明确删除每个实例/类是避免此类问题的唯一方法? (例如,在我的代码中取消注释del a2时,我没有这个错误。)

编辑:

这是我使用的python:

  

Python 3.5.1(默认,2016年4月4日,12:30:47)[GCC 4.2.1兼容   darwin上的Apple LLVM 7.3.0(clang-703.0.29)]

由于垃圾收集器行为可能依赖于Python实现,我认为这可能很重要。

0 个答案:

没有答案