gpt4 book ai didi

python - 如何让 Enum 的成员进入全局命名空间?

转载 作者:行者123 更新时间:2023-11-28 22:45:47 27 4
gpt4 key购买 nike

Python 现在有一个 Enum 类型(3.4 中的新类型 with PEP 435 和其他 backported ),虽然命名空间是个好东西,但有时 Enum 更像常量一样使用,并且 enum 成员应该存在于全局 (呃,模块)命名空间。

所以代替:

Constant(Enum):
PI = 3.14

...

area = Constant.PI * r * r

我只能说:

area = PI * r * r

有没有一种简单的方法可以从 Constant.PIPI

最佳答案

官方支持的方法是这样的:

globals().update(Constant.__members__)

这是有效的,因为 __members__ 是类似于 dict 的对象,它包含 Enum 类的名称和成员。

我个人觉得这很丑陋,所以我通常将以下方法添加到我的枚举类中:

@classmethod
def export_to(cls, namespace):
namespace.update(cls.__members__)

然后在我的顶级代码中我可以说:

Constant.export_to(globals())

注意:只有当模块只有一个这样的导出枚举时,才能将枚举导出到全局命名空间。如果您有多个,最好为 Enum 本身设置一个较短的别名,并使用它而不是污染全局命名空间:

class Constant(Enum):
PI = ....
C = Constant

area = C.PI * r * r

关于python - 如何让 Enum 的成员进入全局命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28130683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com