代码之家  ›  专栏  ›  技术社区  ›  Bialecki

如何从模块中动态地向模块添加属性?

  •  3
  • Bialecki  · 技术社区  · 14 年前

    在我要定义的模块中说:

    a = 'a'
    b = 'b'
    ...
    z = 'z'
    

    对于某些集合(在本例中,我选择字母)。如何在当前模块上动态设置属性?类似:

    for letter in ['a', ..., 'z']:
        setattr(globals(), letter, letter)
    

    这不管用,但怎么办?(我的理解是,模块中的globals()指向该模块属性的dict,但如果这是错误的,请随时纠正我)。

    1 回复  |  直到 14 年前
        1
  •  10
  •   Dave Kirby    14 年前

    globals()返回当前模块的字典,因此可以像添加其他字典一样向其中添加项。尝试:

    for letter in ['a', ..., 'z']:
        globals()[letter] = letter
    

    或者消除对globals()的重复调用:

    global_dict = globals()
    for letter in ['a', ..., 'z']:
        global_dict[letter] = letter
    

    甚至:

    globals().update((l,l) for l in ['a', ...,'z'])