Отвечая на главный вопрос, вообще не разбираясь с SQLALchemy или elixir - да, это возможно в Python.
Модуль сборщика мусора (gc
) в стандартной библиотеке имеет вызов функции, который позволяет получить все ссылки на данный объект в интерпретаторе. Класс всегда упоминается в атрибуте __mro__
любого унаследованного класса.
Итак, следующая функция может извлечь все классы, которые наследуются от данного класса:
import gc
def find_subclasses(cls):
all_refs = gc.get_referrers(cls)
results = []
for obj in all_refs:
# __mro__ attributes are tuples
# and if a tuple is found here, the given class is one of its members
if (isinstance(obj, tuple) and
# check if the found tuple is the __mro__ attribute of a class
getattr(obj[0], "__mro__", None) is obj):
results.append(obj[0])
return results