python - Python:通过变量从库中导入所有对象
问题描述
我想通过变量从库中导入所有对象。我知道如何从库中导入所有对象:
from package import *
我知道如何通过变量导入库:
import importlib
var = 'package'
package = importlib.import_module(var)
但是,我无法弄清楚如何将这两个目标结合起来。它看起来不importlib.import
支持这一点。任何人都可以帮忙吗?
注意:我知道以这种方式绕过命名空间的危险(并且任何对我的询问使用潜在答案的人都应该熟悉这些危险)。我只打算用它来快速开发和测试一些算法,并计划用我的文件中的各个对象的明确名称来发布我的代码。
编辑:我想出了一个最小的例子。假设我在同一个目录中有三个文件:
辅助1.py
var = 'aux2'
辅助2.py
a = 0
b = 1
主文件
import importlib
from aux1 import var
aux2 = importlib.import_module(var)
如果我运行 main.py,我可以访问a
andb
作为aux2.a
and aux2.b
,但我希望它们成为全局变量。main.py
为了做到这一点,最后需要什么?
解决方案
您可以遍历从__dict__
返回的模块的属性,如果它不以 开头,则import_module
将该项目添加到。globals()
__
import importlib
var = 'package'
package = importlib.import_module(var)
for name, value in package.__dict__.items():
if not name.startswith("__"):
globals()[name] = value
如果您只想导入 的某些成员package
,则可以使用getattr()
默认值None
:
imports = ['obj1', 'obj2', 'obj3']
for name in imports:
value = getattr(package, name, None)
if value is not None:
globals()[name] = value
推荐阅读
- python - 集群验证:如何验证和测量预定义的集群
- ios - RxSwift 将两个 api 请求合并为一个结果清除第一个结果
- java - 将 spring web jar 从 5.1.3 升级到 Spring web 5.1.4 时出现异常
- linq - 检查孙子记录以返回祖父母。林克
- bash - 是否可以确定所谓的 bash shell 脚本?
- sql - SQL 根据出现在参数之外的数据排除数据
- unit-testing - kotlin 多平台库 简单http get请求测试
- robotframework - 传递 --form 文件作为 ROBOT 框架的一部分
- ssas - 根据日期维度值过滤的 TopCount
- android - 在移动蓝牙设置中配对蓝牙 BLE 设备而不配对