Python:如何使用Enum值污染名称空间

时间:2017-05-17 14:13:04

标签: python enums

如果其他人之前已经这样做了,那就很好奇。

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

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

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

如果定义class Color(Enum):后你可以from Color import *

,那就太好了

我可以写一个pollute_enum()函数,它会与locals()或其他东西混在一起,但将该函数移动到实用程序包中会有问题,因为locals()会引用别的。我知道有些模块可以通过调用堆栈,但现在它变得非常hacky。

2 个答案:

答案 0 :(得分:1)

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

RED = 0
BLUE = 1
GREEN = 2

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

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

答案 1 :(得分:1)

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

注意:不推荐

import enum

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

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