Python:如何用枚举值污染命名空间



很好奇其他人以前是否这样做过。

我想用枚举值污染我的命名空间。

例如,在我的代码中,我想引用RED,GREEN和BLUE,而不是

Color.RED,Color.GREEN和Color.BLUE。

直接的方法是,在定义枚举后,RED = Color.REDGREEN = Color.GreenBLUE = Color.BLUE......但我想保持干燥(不要重复自己(,这意味着当我向枚举添加新颜色时,我也不想将其显式添加到命名空间中。

如果在定义class Color(Enum):后您可以from Color import *,那就太好

我可以编写一个 pollute_enum() 函数,它会与 locals() 或其他东西一起猴子,但是将该函数移动到实用程序包中会是一个问题,因为locals()会引用其他东西。 我知道有些模块可以沿着调用堆栈向上走,但现在它变得非常笨拙。

我不确定你为什么要这样做,但你可以即时更新模块中的locals

注意:不推荐

import enum
class Color(enum.Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
locals().update({color.name: color for color in Color})

我不提倡使用全局状态,但你可以创建一个名为 color_enums.py 的模块并在其中写道:

RED = 0
BLUE = 1
GREEN = 2

然后在你的代码中,你可以做:

from color_enums import *
if thing == GREEN:
    # do something

最新更新