Python 3.11+enumфункция
enum.pickle_by_global_name
pickle
Функция-редьюсер для pickle: сериализует член глобализированного перечисления по его глобальному имени в модуле.
Синтаксис
member.__reduce_ex__ = enum.pickle_by_global_name
Подходит только перечислениям под @global_enum, члены которых продублированы в globals() модуля: pickle тогда хранит обычную ссылку вида module.NAME. Если такое имя из модуля исчезнет или его переименуют, распаковка упадёт на поиске атрибута, поэтому для обычных, не глобализированных перечислений берите pickle_by_enum_name.
Примеры
import enum
print(callable(enum.pickle_by_global_name)) # → True
Color = enum.Enum('Color', 'RED GREEN')
print(enum.pickle_by_global_name(Color.GREEN, 2)) # → GREEN
print(isinstance(enum.pickle_by_global_name(Color.GREEN, 2), str)) # → True
print(Color.GREEN.__reduce_ex__(2)[1]) # → (2,)
print(enum.pickle_by_enum_name(Color.GREEN, 2)[0] is getattr) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности