【发布时间】:2018-02-14 20:06:54
【问题描述】:
我想基于两个现有的类创建一个新的 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)])))
我的问题:有没有一种奇特的方法来实现这一点,以便有一个适当的类定义?喜欢覆盖一些元类方法,还是这样?我想要这样的东西,这样也可以给出文档字符串:
@unique
class CombinedEnumClass(IntEnum):
""" docstring """
# magic needed here
有什么想法吗?谢谢!
【问题讨论】:
-
你不需要
OrderedDict,你可以只给出列表理解。 -
我知道,它就是这样工作的,问题是我正在使用 PyCharm,如果只给出一个列表,它会发出警告:“预期类型 'Integral',得到 'List[Tuple [Any, Any]]' 代替”,OrderedDict 解决了这个问题。但是,确实,没有它它就可以工作。无论如何,我仍然无法像类定义一样做到这一点。
标签: python enums metaprogramming python-3.5 metaclass