Форум сайта python.su
Есть два базовых класса, FirstParentClass и SecontParentClass, также есть некоторое количество классов-потомков от каждого из них. Каждый класс-потомок описан в своем *.py файле, пути к файлам известны. Нужно программно импортировать и создавать объекты классов. Сейчас делаю так:
import inspect import importlib class_name = "FirstChildClass" file_path = "/path/to/class.py" try: spec = importlib.util.spec_from_file_location(class_name, file_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) for x in dir(module): obj = getattr(module, x) if inspect.isclass(obj) and (issubclass(obj, FirstParentClass) or issubclass(obj, SecondParentClass)) and obj.__name__ == class_name: return obj() except ImportError as e: print(e)
Офлайн
_alexs_Есть несколько способов:
А можно ли как-то обойтись без имени класса, ведь класс в файле всего один?
Офлайн
В модуле нужно создать переменную __all__ с кортежем того что можно импортировать. А затем просто читаешь что в ней записано и получаешь имена классов.
Офлайн