2012-06-23 3 views
1

Есть ли способ узнать, где был создан экземпляр объекта Python в первый раз? Как номер строки или даже полная трассировка при создании?Узнайте, где был создан объект Python

Для профилирования памяти я хотел бы изучить все объекты после запуска. (Я знаю инструменты профилирования памяти, но их сложно установить или не выполнять эту задачу).

ответ

2

Это не возможно в родном Python, чтобы получить эту информацию от объекта, после того, как он был создан, но вы можете переопределить __new__() метод на базовый класс, чтобы записать его где-нибудь на объекте (получение его из inspect модуля).

+0

Проблема в том, что в основном это списки и dict. Итак, я полагаю, мне нужно переписать весь код или я могу переопределить для всех '[]' и '{}' автоматически? – Gerenuk

+0

Нет, к сожалению, вы не можете легко переопределить '[]' и '{}' литералы автоматически. Вам придется обернуть литералы при вызове пользовательского списка или класса dict. – kindall

+0

Вы можете посмотреть модуль 'ast' и обнаружить все литеральные узлы List и Dict в контексте Load и заменить их программно. – JPvdMerwe

Смежные вопросы