如何允许从 Python 中的模块全局上下文访问类属性?



我定义了一个枚举类,并希望能够使用其属性而无需通过类名访问它。我的意思是:

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>

如果使用aenum1,则export()函数已经可用,可以用作修饰器:

from aenum import Enum, export
@export(globals())
class MyEnum(Enum):
ONE = 1
TWO = 2

1披露:我是Python stdlibEnumenum34向后移植和高级枚举(aenum(库的作者。

相关内容

  • 没有找到相关文章

最新更新