首页 > 解决方案 > 如何以编程方式在模块中添加或删除名称

问题描述

假设我动态创建了一个模块:

import imp
my_module = imp.new_module('my_module')

我想向n这个模块添加类似的名称/值,这相当于

my_module.a1 = None
my_module.a2 = None
my_module.a3 = None
...

如何访问像字典一样的模块名称空间(或以类似的方式),以便我可以编写类似的东西

for i in range(n):
    my_module.some_env_like_dict[f"a{i}"] = None

另外,我怎样才能以类似的方式删除这些名称?

我了解 Python 可能没有推荐或官方的方式来执行此操作。显然,这不适用于任何严肃的项目。

我正在寻找一种比使用更优雅的解决方案exec

标签: python

解决方案


我认为您所做的基本上是正确的,只是添加了一些内容:

my_module = imp.new_module('my_module')
my_module.var1 = 123

这将创建一个模块,并设置var1123模块内。您可以像访问my_module.var1任何其他模块一样访问它。

要从字符串访问属性,您可以执行以下操作:

val = getattr(my_module, "var1")
setattr(my_module, "var1", val + 1)

这设置val123,然后使用值更新var1。您也可以通过这种方式向模块添加新属性。my_module124


推荐阅读