我定义了一个枚举类,并希望能够使用其属性而无需通过类名访问它。我的意思是:
class MyEnum:
ONE = 1
TWO = 2
...
if MyEnum.ONE == 1:
"Typic use"
if TWO == 2:
"My desire"
有没有办法做到这一点?
在我的特定上下文中,我通过Cohen-Sutherland算法计算窗口的点外部性,所以我有以下代码:
class Externality:
INSIDE = 0
LEFT = 1
RIGTH = 2
BELLOW = 4
ABOVE = 8
# And at some point:
((x, y), externality) = actual
if not Externality.INSIDE in externality:
del cohen_sutherland_list[0]
因此,需要 express Enum 的名称来访问其项目,这使得if
语句(和整个代码(更加冗长和多余。
首先要做的是:从Enum
继承。
就像 Python 中的所有内容一样,您需要做的就是分配名称:
from enum import Enum
class MyEnum(Enum):
ONE = 1
TWO = 2
ONE = MyEnum.ONE
TWO = MyEnum.TWO
这可能会很快变得烦人,所以辅助函数会很好:
def export_enum(enum_cls, env):
for member in enum_cls:
env[member.name] = member
和使用中:
>>> export_enum(MyEnum, globals())
>>> TWO
<MyEnum.TWO: 2>
如果使用aenum
1,则export()
函数已经可用,可以用作修饰器:
from aenum import Enum, export
@export(globals())
class MyEnum(Enum):
ONE = 1
TWO = 2
1披露:我是Python stdlibEnum
、enum34
向后移植和高级枚举(aenum
(库的作者。