【问题标题】:Unexpected: flufl.enum prints integer value意外:flufl.enum 打印整数值
【发布时间】:2012-01-27 17:16:39
【问题描述】:

使用 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))

除了打印(Color.red)之外,一切都按预期工作。根据http://packages.python.org/flufl.enum/docs/using.html,我希望它打印“Colors.red”,但它正在打印 1。熟悉这个包的任何人都知道是否有办法让它打印“Colors.red”?我在图书馆的网站上发布了一个问题,但我认为这里的人可能也有经验。

编辑:如果我用以下方式定义颜色,它会按预期工作:

Colors = make_enum('Colors','red green blue')

但我更喜欢以下语法:

class Colors(Enum):
    red = 1
    green = 2
    blue = 3

【问题讨论】:

    标签: python enums


    【解决方案1】:

    我意识到 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?

    【讨论】:

    • 嗯。当 __metaclass__ 属性出现在类定义中时,Python 3 可能会发出警告。
    • 同意,这样会更快地提示我。
    猜你喜欢
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 2013-03-21
    • 2013-03-31
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多