#python
Возможен ли способ выяснить - был ли проимпортирован класс\атрибут\функция из текущего
файла в другом файле текущего проекта?
Например, есть код:
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):
print('class {0} used in {1}'.format(class_name, module_name))
Что при выполнении:
inspection(file01)
Выдаст результат типа:
class Foo1 used in: file02
class Foo2 used in: None
Подобный функционал был бы полезен для написания docstring для файлов __init__.py.
В котором, согласно PEP257, необходимо отобразить экспортироемую пакетом информацию.
Ответы
Ответ 1
К сожелению без запуска кода никак 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']
Комментариев нет:
Отправить комментарий