Python枚举组合
作者:互联网
我想基于两个现有的类创建一个新的Enum(IntEnum)类.有一个可行的解决方案,如下所示:
from enum import unique, IntEnum
from itertools import chain
from collections import OrderedDict
@unique
class FirstEnumClass(IntEnum):
a = 1
b = 2
@unique
class SecondEnumClass(IntEnum):
c = 3
d = 4
# here a combined class is created:
CombinedEnumClass = unique(IntEnum('CombinedEnumClass', OrderedDict([(i.name, i.value) for i in chain(FirstEnumClass, SecondEnumClass)])))
我的问题:是否有一种理想的方法来实现这一点,以便有一个正确的类定义?像重写某些元类方法一样?我想要这样的东西,所以也可以给出docstring:
@unique
class CombinedEnumClass(IntEnum):
""" docstring """
# magic needed here
任何想法?谢谢!
解决方法:
prevents explicitly库可以做到这一点:
Subclassing an enumeration is allowed only if the enumeration does not
define any members.Allowing subclassing of enums that define members would lead to a
violation of some important invariants of types and instances. On the
other hand, it makes sense to allow sharing some common behavior
between a group of enumerations.
因此,我发现使用与您几乎相同的解决方法的Stackoverflow answer.我认为这是唯一的方法.
标签:python-3-5,enums,metaprogramming,metaclass,python 来源: https://codeday.me/bug/20191025/1930750.html