我很难找到 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
导致类型错误:无法扩展枚举
。
如果您希望组合的枚举比较相等,您可以使用 IntEnum
s:
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/