我读了问题“导入Python文件的整个文件夹”,但它不包括一种无需每个文件导入一次的方法。
除了要求避免多次导入之外,还要求类的数量与编写的代码量无关。我也想避免“from source import *”出现在代码中,但我并不反对它。
我已经尝试过这个。
from system.models import *
但这会导致
model = globals()[class_name](labels.size()[:-1], labels.size()[-1])
类型错误:“模块”对象不可调用
我也试过这个
import sys
sys.path.insert(0, r'../system/models')
但这会导致全局变量不包含类。
最终目标是,给定一个指定为 python 包的文件夹,获取该包中包含的 python 文件中的所有类。
我能够使用以下代码动态加载类对象。
classes = []
package = models
for importer, modname, _ in pkgutil.iter_modules(package.__path__):
module = importlib.import_module(f"{package.__name__}.{modname}")
for name, obj in inspect.getmembers(module):
if inspect.isclass(obj) and obj.__module__ == module.__name__:
classes.append(obj)
然后从类中获取任何类对象,您可以像这样创建它的实例。
new_object = class_object()