Размещение объектов отслеживания в python

Есть ли какой-нибудь метод, который я могу переопределить, который позволит мне использовать операторы печати / pdb / и т. Д., Чтобы отслеживать каждый раз, когда выделяется экземпляр моего класса? При распаковке некоторых объектов я, кажется, получаю те, которые никогда не вызывали ни __ setstate __ , ни __ init __ . Я попытался переопределить __ new __ и распечатать идентификатор каждого объекта, который я создал в __ new __ , но я все еще сталкиваюсь с объектами с идентификаторами, которые никогда не печатались.

Изменить: вот мой код, который я использую для изменения (инструментария) __ new __ моего класса и всех его суперклассов, кроме ] сам объект :

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 __ , который также выводит идентификатор.

10
задан Ian Goodfellow 25 January 2011 в 22:07
поделиться