Python Glossary English

Python 3.11+enumфункция

enum.pickle_by_enum_name

pickle

Функция-редьюсер для pickle: сериализует член перечисления по паре (класс, имя члена) вместо значения — надёжнее при изменении значений.

Синтаксис

member.__reduce_ex__ = enum.pickle_by_enum_name

По умолчанию член перечисления пикуется по значению — в потоке фактически лежит вызов Colour(1). Если значения потом сдвинутся (особенно при auto()), старый pickle не упадёт, а тихо развернётся в другой член; хранение по имени такой ошибки не допускает. Присваивать редьюсер надо в теле класса перечисления: __reduce_ex__ = enum.pickle_by_enum_name.

Примеры

import enum
print(callable(enum.pickle_by_enum_name))   # → True
Color = enum.Enum('Color', 'RED GREEN')
print(Color.RED.__reduce_ex__(2)[1])   # → (1,)
func, args = enum.pickle_by_enum_name(Color.RED, 2)
print(func is getattr)   # → True
print(args[1])   # → RED
print(func(*args) is Color.RED)   # → True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности