我定义了一个枚举类,并且希望能够使用其属性而无需通过类名访问它。我的意思是:
class MyEnum:
ONE = 1
TWO = 2
...
if MyEnum.ONE == 1:
"Typic use"
if TWO == 2:
"My desire"
有没有办法做到这一点?
在我的特定上下文中,我正在通过Cohen–Sutherland algorithm计算窗口的点外部性,因此我有以下代码:
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]
因此,需要表达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 aenum
功能已经可用,并且可以用作装饰器:
export()
1披露:我是from aenum import Enum, export
@export(globals())
class MyEnum(Enum):
ONE = 1
TWO = 2
,Python stdlib Enum
和Enum
库的作者。