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

Python:如何使用枚举值污染命名空间,python,enums,Python,Enums,我很好奇以前是否有人这样做过 我想用枚举值污染我的命名空间 例如,在我的代码中,我希望引用红色、绿色和蓝色,而不是Color.RED、Color.GREEN和Color.BLUE 简单的方法是,在定义枚举后,将RED=Color.RED、GREEN=Color.GREEN和BLUE=Color.BLUE。。。但我希望保持干燥(不要重复),这意味着当我向枚举添加新颜色时,我不希望也必须显式地将其添加到名称空间 如果在定义类颜色(枚举):之后,您可以从颜色导入中* 我可以编写一个inclute_en

我很好奇以前是否有人这样做过

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

例如,在我的代码中,我希望引用红色、绿色和蓝色,而不是Color.RED、Color.GREEN和Color.BLUE

简单的方法是,在定义枚举后,将
RED=Color.RED
GREEN=Color.GREEN
BLUE=Color.BLUE
。。。但我希望保持干燥(不要重复),这意味着当我向枚举添加新颜色时,我不希望也必须显式地将其添加到名称空间

如果在定义
类颜色(枚举):
之后,您可以从颜色导入中
*


我可以编写一个
inclute_enum()
函数,该函数将与
locals()
或其他东西一起使用,但是将该函数移动到实用程序包中会有问题,因为
locals()
会引用其他东西。我知道有一些模块可以在调用堆栈上运行,但现在它变得非常粗糙。

我不是提倡使用全局状态的人,但您可以创建一个名为
color\u enums.py
的模块,并在其中写入:

RED = 0
BLUE = 1
GREEN = 2
然后在代码中,您可以执行以下操作:

from color_enums import *
if thing == GREEN:
    # do something
我不确定您为什么要这样做,但您可以在模块中动态更新
locals

注意:不推荐使用

import enum

class Color(enum.Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

locals().update({color.name: color for color in Color})

出于好奇,您到底为什么要这样做?他希望模块中的
RED
变量是
Color.RED
,而不是
0
locals()。更新(Color.\uu成员)
?还要注意,OP已经提到了类似的东西。另外,这对函数内的导入不起作用。