Возможен ли способ выяснить - был ли проимпортирован класс\атрибут\функция из текущего файла в другом файле текущего проекта?
Например, есть код:
file01.py
class Foo1():
pass
class Foo2():
pass
file02.py
import file01
class Bar1():
f1 = file01.Foo1()
f2 = file01.Foo2()
class Bar2():
pass
Для задачи есть функция:
def inspection(module):
for i in dir(module):
Что при выполнении:
inspection(file01)
Выдаст результат типа:
class Foo1 used in: file02
class Foo2 used in: None
Подобный функционал был бы полезен для написания docstring для файлов __init__.py. В котором, согласно PEP257, необходимо отобразить экспортироемую пакетом информацию.
Ответ
К сожелению без запуска кода никак
import sys
def watch_uses(cls, log):
class MetaTemp(type(cls)):
def __call__(cls, *args, **kwargs):
call_frame = sys._getframe(1)
log.append('{}:{}'.format(
call_frame.f_locals['__file__'], call_frame.f_lineno
))
return super().__call__(*args, **kwargs)
class new_cls(cls, metaclass=MetaTemp):
pass
return new_cls
class C:
pass
uses_C = []
C = watch_uses(C, uses_C)
#здесь вам нужно как-то происпользовать C
c = C()
c = C()
print(uses_C) #может вывести: ['./t.py:27', './t.py:28']
Комментариев нет:
Отправить комментарий