Я определил следующее перечисление
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
теперь напечатанное значение
D.x
вместо этого я хотел, чтобы значение перечисления было напечатано
1
Что можно сделать для достижения этой функциональности?
python
python-3.x
enums
python-3.4
Вайбхав Мишра
источник
источник
Ответы:
Вы печатаете объект перечисления . Используйте
.value
атрибут, если хотите просто напечатать это:См Программный доступ к членам перечисления и их атрибуты раздела :
Вы можете добавить
__str__
метод в свое перечисление, если все, что вам нужно, - это предоставить настраиваемое строковое представление:Демо:
источник
if D.x == 10: ...
. Какой подход я должен использовать для целых чисел?D.x
- объект перечисления,D.x.value
- целочисленное значение. Если вам необходимо, чтобы значения перечисления действовали как целые числа, используйтеIntEnum
тип , где каждый элемент является подклассомint
и поэтомуIntEnumD.x == 10
будет работать.def __eq__(self, other): return int(self.value) == other
и ,def __int__(self): return int(self.value)
но все - таки я думаю , что я должен использовать.value
в тех случаях , когда я не использую сравнение__eq__
реализация не работает, когда указаноother
другое значение перечисления;D.x == D.y
, гдеD.x.value == D.y.value
бы правда, не получилось бы например. Похоже, вы хотите использоватьIntEnum
вместоEnum
него.Я реализовал доступ, используя следующие
теперь я могу просто сделать
print(D.x)
получить1
как результат.Вы также можете использовать,
self.name
если хотите распечататьx
вместо1
.источник
self._value_
?return str(self.value)
проще.self.value
чище.value
в качестве имени для своего типа перечисления).Я нашел эту страницу при поиске доступа к объекту с
Enum
использованием строки. Я знаю, что в этом конкретном вопросе задают не об этом, но название «предполагает» это.Чтобы получить Enum с использованием String, вы можете сделать следующее:
источник