很好奇其他人以前是否这样做过。
我想用枚举值污染我的命名空间。
例如,在我的代码中,我想引用RED,GREEN和BLUE,而不是Color.RED,Color.GREEN和Color.BLUE。
直接的方法是,在定义枚举后,RED = Color.RED
、GREEN = Color.Green
和BLUE = 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