使用Python 3,我将flufl.enum代码打包到我的应用程序源代码树中,只是为了尝试它。示例代码:
from taurine.flufl.enum import Enum
class Colors(Enum):
red = 1
green = 2
blue = 3
print(Colors.red)
red = Colors.red
print("red == Colors.red "+str(red == Colors.red))
print("red == Colors.blue "+str(red == Colors.blue))
print("red is Colors.red "+str(red is Colors.red))
除了print(Color.red)之外,一切都按预期工作。根据{{3}}我希望它能打印出“Colors.red”,但它正在打印1.任何熟悉这个包的人都知道是否有办法让它打印出“Colors.red”?我在图书馆的网站上发布了一个问题,但认为这里有人可能也有经验。
编辑:如果我用以下颜色定义颜色,它会按预期工作:
Colors = make_enum('Colors','red green blue')
但我更喜欢以下语法:
class Colors(Enum):
red = 1
green = 2
blue = 3
答案 0 :(得分:3)
我意识到init甚至没有在EnumMetaclass上调用。我认为_enum.py中的以下代码是为了从Enum继承所有你需要做的事情,但是关于它的一些东西不起作用而且超出了我的范围:
class Enum:
__metaclass__ = EnumMetaclass
这有效:
class Colors(metaclass=EnumMetaclass):
red = 1
green = 2
blue = 3
我现在很高兴。
编辑:找出原因。请参阅以下问题的第一个答案:Shouldn't __metaclass__ force the use of a metaclass in Python?