Python 现在有一个 Enum 类型(3.4 中新增)与 PEP 435,还有向后移植),虽然命名空间是一件好事,但有时枚举更像常量,并且枚举成员应该位于全局(呃,模块)命名空间中。
所以而不是:
Constant(Enum):
PI = 3.14
...
area = Constant.PI * r * r
我只能说:
area = PI * r * r
有没有简单的方法可以从Constant.PI
只是PI
?
官方支持的方法是这样的:
globals().update(Constant.__members__)
这有效是因为__members__
is the dict
-like 对象,保存 Enum 类的名称和成员。
我个人觉得这很丑陋,所以我通常将以下方法添加到我的枚举类中:
@classmethod
def export_to(cls, namespace):
namespace.update(cls.__members__)
然后在我的顶级代码中我可以说:
Constant.export_to(globals())
注意:仅当模块只有一个此类导出的 Enum 时,将 Enum 导出到全局命名空间才有效。如果您有多个,最好为 Enum 本身使用一个较短的别名,并使用它而不是污染全局名称空间:
class Constant(Enum):
PI = ....
C = Constant
area = C.PI * r * r
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)