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