python - Python 中的枚举组合

标签 python python-3.x enums

我很难找到 Python 中 OO Enum 组合的示例。所以我想问下面的例子是否正确或者更多的Pythonic方法是可取的?

在声明 Enum 时我更喜欢类语法,但对于组合功能 API 似乎是可取的。有什么方法可以使用类语法来做到这一点吗?

from enum import Enum


class Vertical(Enum):

    Tall = 1
    Short = 2


class Horizontal(Enum):

    Slim = 1
    Spacious = 2


composition = list(Vertical.__members__)
composition.extend(Horizontal.__members__)

Body = Enum('Body', composition)

最佳答案

您无法派生枚举,它们是“密封的”:

class Body(Vertical): pass

导致类型错误:无法扩展枚举

<小时/>

如果您希望组合的枚举比较相等,您可以使用 IntEnums:

from enum import IntEnum 

class Vertical(IntEnum ):
    Tall = 1
    Short = 2 

class Horizontal(IntEnum):  # distinct int's
    Slim = 3
    Spacious = 4 

composition = list(Vertical.__members__)
composition.extend(Horizontal.__members__)

Body = IntEnum('Body', composition)

用法:

print(Body.Tall == Vertical.Tall)  # True
print(Body.Tall == 1)              # Also True

本质上它可以归结为:你的枚举现在也是 int 的。不过,您需要注意不要将相同的整数赋予不同的概念:

class Sizes(IntEnum):
    Tiny = 1

print(Sizes.Tiny == Vertical.Tall)  # True - but not really?

关于python - Python 中的枚举组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54045700/

相关文章:

python - 如何使用小的单个图像并在整个窗口中重复它以使用 tkinter GUI 使其成为背景图像?

java - OpenCSV - 注册自定义转换器

python - 陈旧;元素不再附加到 DOM,不在当前框架上下文中,或者文档已刷新

Python 打印对象地址而不是值

python - 我如何/可以使用 python 和加密模块生成 PKCS#12 文件?

python - 如何在 pygame 中创建 "while mouse down"循环

java - 当我将枚举的构造函数设为私有(private)或默认时有什么区别?

c# - 仅为部分成员指定值的枚举

python - 如何在 pandas 中指定空格

python 请求相当于 curl -H