Я пытаюсь отладить встроенный класс Python. Моя отладка привела меня в область магических методов (методов Дандера).
Я пытаюсь выяснить, какие методы dunder вызываются, если таковые имеются. Обычно я бы сделал что-то вроде этого:
import sys
import traceback
# This would be located where the I'm currently debugging
traceback.print_stack(file=sys.stdout)
Тем не менее, traceback.print_stack
не дает мне подробной информации о том, какие методы dunder использовались в его окрестностях.
Можно ли как-то очень подробно распечатать, что на самом деле происходит внутри блока кода?
Пример кода
#!/usr/bin/env python3.6
import sys
import traceback
from enum import Enum
class TestEnum(Enum):
"""Test enum."""
A = "A"
def main():
for enum_member in TestEnum:
traceback.print_stack(file=sys.stdout)
print(f"enum member = {enum_member}.")
if __name__ == "__main__":
main()
Я хотел бы, чтобы приведенный выше пример кода распечатывал любые используемые методы dunder (например: __iter__
).
В настоящее время он выводит путь к вызову traceback.print_stack
:
/path/to/venv/bin/python /path/to/file.py
File "/path/to/file.py", line 56, in <module>
main()
File "/path/to/file.py", line 51, in main
traceback.print_stack(file=sys.stdout)
enum member = TestEnum.A.
P.S. Меня не интересует переход на уровень байт-кода, заданный dis.dis
.