Неожиданно: flufl.enum печатает целочисленное значение - PullRequest
1 голос
/ 26 декабря 2011

Используя 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

1 Ответ

3 голосов
/ 26 декабря 2011

Я понял, что init даже не вызывали в EnumMetaclass.Я думаю, что следующий код в _enum.py предназначен для того, чтобы сделать наследование от Enum всем, что вам нужно сделать, но что-то в этом не работает, и это за мной:

class Enum:
    __metaclass__ = EnumMetaclass

Это работает:

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

Я счастлив сейчас.

РЕДАКТИРОВАТЬ: выяснил, почему.См. Первый ответ на следующий вопрос: Разве __metaclass__ не должен принудительно использовать метакласс в Python?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...