【问题标题】:How to programatically add or delete names in a module [duplicate]如何以编程方式在模块中添加或删除名称[重复]
【发布时间】:2020-05-08 10:07:51
【问题描述】:

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

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


    【解决方案1】:

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

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

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

    要从字符串中访问属性,您可以:

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

    这会将val 设置为123,然后将my_module 中的var1 更新为124。您也可以通过这种方式为模块添加新属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2023-04-04
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      相关资源
      最近更新 更多