我试图用一个抽象方法创建一个抽象枚举(Flag
)。
我的最终目标是能够基于我定义的基本枚举创建复合枚举的字符串表示。
我可以在不把类抽象化的情况下获得这个功能。在
这是基本的Flag
类和一个示例实现:
from enum import auto, Flag
class TranslateableFlag(Flag):
@classmethod
def base(cls):
pass
def translate(self):
base = self.base()
if self in base:
return base[self]
else:
ret = []
for basic in base:
if basic in self:
ret.append(base[basic])
return " | ".join(ret)
class Students(TranslateableFlag):
ALICE = auto()
BOB = auto()
CHARLIE = auto()
ALL = ALICE | BOB | CHARLIE
@classmethod
def base(cls):
return {Students.ALICE: "Alice", Students.BOB: "Bob",
Students.CHARLIE: "Charlie"}
示例用法如下:
^{pr2}$由于元类冲突,切换到TranslateableFlag(Flag, ABC)
失败。
(我不明白这篇文章-Abstract Enum Class using ABCMeta and EnumMeta,所以我不确定它是否回答了我的问题)。在
我想得到这样的功能:
@abstractclassmethod
@classmethod
def base(cls):
pass
有可能做到这一点吗?在
下面是如何将accepted answer调整为问题Abstract Enum Class using ABCMeta and EnumMeta,以创建您想要的抽象
Enum
类:结果:
^{pr2}$如果目标只是更改
Students1
的__str__
输出,则不需要使用抽象类:使用中:
^{pr2}$相关问题 更多 >
编程相关推荐