#python #class #traceback #inspect
#python #класс #трассировка #Осмотр
Вопрос:
Есть некоторые пакеты, в которых есть некоторые методы, такие как subscribe
or add
, которые позволяют пользователю добавлять настраиваемую функцию обратного вызова. Для целей отладки и любопытства я хотел бы знать, какая функция и какой класс в этом пакете фактически вызвали мою функцию обратного вызова позже. Поэтому было бы неплохо, если бы у меня был номер строки класса.
Минимальный рабочий пример
# test.py
import inspect
class Foo: # line 5
def caller(self):
print("Hello from caller")
b=Bar()
b.func()
class Bar:
def func(self):
print("Hello from func")
stack = inspect.stack()
the_class = stack[1][0].f_locals["self"].__class__.__name__
the_method = stack[1][0].f_code.co_name
# Need some help here to get value 5
# To do
# ...
print(f"Called by {the_class}.{the_method}()")
f = Foo()
f.caller()
Вывод:
Hello from caller
Hello from func
Called by Foo.caller()
Вопрос: Внутри func
, как получить значение 5, которое является номером строки определения class Foo
? В идеале с помощью inspect
или другой магии трассировки, а не путем поиска строки в файле.
Комментарии:
1. Чего вы на самом деле пытаетесь достичь здесь? Что вы будете делать с номером строки?
2. @jonrsharpe, я добавляю больше деталей о мотивации.