Python 中的枚举组合



我很难在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

导致TypeError: Cannot extend enumerations.


如果你想让你组合的枚举比较相等,你可以使用 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?

最新更新