是否有任何方法可以覆盖,允许我使用打印语句/pdb / 等来跟踪每次分配我的类的实例?在解开一些对象时,我似乎得到了一些从未有过__setstate__
或从未__init__
调用过它们的对象。我尝试覆盖__new__
并打印出我在其中制作的每个对象的 id __new__
,但我仍然遇到具有从未打印过的 id 的对象。
编辑:这是我用于更改(检测)__new__
我的类及其所有超类的代码,除了object
它自己:
class Allocator:
def __init__(self, my_class):
self.my_class = my_class
self.old_new = my_class.__new__
def new(self, * args, ** kargs):
rval = self.old_new(*args, ** kargs)
#rval = super(self.my_class,cls).__new__(cls)
print 'Made '+str(self.my_class)+' with id '+str(id(rval))
return rval
def replace_allocator(cls):
if cls == object:
return
setattr(cls,'__new__',Allocator(cls).new)
print cls.__base__
try:
for parent in cls.__base__:
replace_allocator(parent)
except:
replace_allocator(cls.__base__)
一旦在主脚本中导入,我就会在我的类的父类上调用 replace_allocator。我的班级有一个习惯__new__
,它也会打印出 id。