У меня есть декоратор, скажем, @find_me
. Я хочу найти все классы, которые украшены им.
Или у меня есть класс, скажем, FindMe
, и я хочу найти все его подклассы.
Почему? потому что я хочу что-то сделать с этими классами до того, как они будут import
-ед.
Так что я читал о __subclasses()__
и о поиске декораторов. Проблема с решениями, которые я нашел, заключается в том, что класс должен быть import
-ed перед выполнением кода.
Другими словами, если у меня есть:
- в модуле
${proj_root}/some_path/FindMe.py
a class FindMe(object):
, - и в модуле
${proj_root}/some_other_path/NeedsToBeFound.py
, a class NeedsToBeFound(FindMe):
, - и другом модуле
${proj_root}/yet_another_path/some_module.py
, - и если
some_module.py
выглядит что-то вроде:
import ... FindMe
...
subclasses_of_FindMe = FindMe.__subclasses()__
тогда ожидаемый класс NeedsToBeFound
не будет в результате (при условии, что его не было import
где-то по пути).
Итак, я думаю, что я ищу способ выполнить какое-то сканирование компонентов по всем python классам (которые находятся в поддереве ${proj_root}
).
Как сделать это проще: найти декораторов или найти подклассы? И как я могу это сделать? ...
Заранее спасибо!