Python 3.11+enumпонятие
enum.property
атрибуты
Аналог встроенного property для перечислений: позволяет атрибуту члена называться так же, как другой член, — так устроены name и value.
Синтаксис
@enum.property
def attr(self): ...
Благодаря ему в Enum можно завести члены с именами name и value: Field.name — член, а Field.name.name — его имя. Свойство и одноимённый член должны быть в разных классах: свойство в базовом Enum, член — в наследнике. При обращении через класс, а не через член, enum.property даёт AttributeError, тогда как обычный property вернул бы сам объект property. Для своих вычисляемых атрибутов членов хватает и обычного @property; enum.property нужен, когда имя может совпасть с членом.
Примеры
from enum import Enum
class Field(Enum):
name = 1
value = 2
print(Field.name, Field.name.name, Field.value.value) # → Field.name name 2
# Python 3.12+
import enum
class Planet(enum.Enum):
EARTH = (5.97e24, 6.37e6)
@enum.property
def mass(self):
return self.value[0]
print(Planet.EARTH.mass) # → 5.97e+24
try:
Planet.mass
except AttributeError as e:
print(e) # → <enum 'Planet'> has no attribute 'mass'
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности