设置一个基类来处理跟踪类实例,同时仍然允许垃圾收集。这篇文章的第二个答案很接近,但在从保存的实例中解压时,我还需要添加到列表中。instances
这是我的代码:
import weakref
import pickle
from pprint import pprint
import copy
class BaseClass(object):
def __new__(cls, *args, **kwargs):
instance = object.__new__(cls, *args, **kwargs)
if 'instances' not in cls.__dict__:
cls.instances = []
cls.instances.append(weakref.ref(instance))
return instance
def __getstate__(self):
print "pickling"
d = self.__dict__
return d
def __setstate__(self, state):
print "unpickling"
self.__dict__ = state
if 'instances' not in self.__dict__:
self.instances = []
self.__class__.instances.append(weakref.ref(self))
return self
BaseClass.instances = []
if __name__ == '__main__':
a = BaseClass()
b = BaseClass() …Run Code Online (Sandbox Code Playgroud)