#python #enums #deprecation-warning
#питон #перечисления #устаревание-предупреждение
Вопрос:
Учитывая следующее перечисление:
class MyEnum(enum.Enum): Field1 = "Field1" Field2 = "Field2" # should be deprecated for `Field3` Filed3 = "Field3"
Я хотел бы добавить предупреждение об устаревании в поле, чтобы при вызове MyEnum.Field2
или MyEnum("Field2")
lt;MyEnum.Field3: 'Field3'gt;
перечислении возвращался экземпляр, а также предупреждение об устаревании.
Как правильно это сделать? Есть ли функция языка python, которая может это сделать?
Ответ №1:
До сих пор мне удавалось добавить пользовательское предупреждение об устаревании только для случая MyEnum("Field2")
(но не для MyEnum.Field2
), перегрузив __missing__
метод следующим образом:
import enum class MyEnum(enum.Enum): @classmethod def _missing_(cls, value: object): """Add deprecation warningt to Field2""" if str(value) == "Field2": print("Field name `Field2` for `MyEnum` enum is deprecated.") return cls.Field3 return value Field1 = "Field1" # Field2 = "Field2" # should be deprecated Field3 = "Field3"