我将X的所有子类保存在一个特定的文件夹(包)中,然后,使用这个方法,我可以加载X的所有子类,即使它们还没有被导入。(如果尚未导入,则无法通过
__all__
否则事情会容易得多)。
import importlib, os, inspect
def get_modules_in_package(package_name: str):
files = os.listdir(package_name)
for file in files:
if file not in ['__init__.py', '__pycache__']:
if file[-3:] != '.py':
continue
file_name = file[:-3]
module_name = package_name + '.' + file_name
for name, cls in inspect.getmembers(importlib.import_module(module_name), inspect.isclass):
if cls.__module__ == module_name:
yield cls