如何获取另一个包中的所有类,以便可以在Python3中实例化它们?

问题描述 投票:0回答:1

我读了问题“导入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 文件中的所有类。

python python-3.x module python-import global
1个回答
0
投票

我能够使用以下代码动态加载类对象。

    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()

© www.soinside.com 2019 - 2024. All rights reserved.