如何允许在Python中在没有类名的情况下从外部访问类属性?

问题描述 投票:2回答:1

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

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语句(以及整个代码)更加冗长和多余。

python-3.x enums attributes global
1个回答
2
投票

首先,从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 EnumEnum库的作者。

© www.soinside.com 2019 - 2024. All rights reserved.