Безопасность быстрого обновления от старого до нового типа - PullRequest
2 голосов
/ 03 июля 2019

Вместо перечислений в стиле NewBreakfast предположим, что в проекте все еще есть перечисления в стиле OldBreakfast, остатки Python2 дней.

from enum import Enum


class OldBreakfast:
    HAM = 0x00
    EGGS = 0x01
    PANCAKES = 0x02


class NewBreakfast(Enum):
    HAM = 0x00
    EGGS = 0x01
    PANCAKES = 0x02


def eat():
    food1 = OldBreakfast.HAM
    food2 = NewBreakfast.HAM
    print(food1)
    print(food2)


eat()

Как видно из eat() в приведенном выше коде, одно из преимуществ перехода от "старого" к "новому" заключается в том, что при пошаговом или, в данном случае, печати можно увидеть, что вы едите, а не необходимо вернуться к коду и выполнить обратное сопоставление кодов.

Приятно, что обновление перечислений в новом стиле требует очень ограниченных манипуляций. В частности, необходимо только само определение. Все остальное будет работать по волшебству.

Действительно ли это последнее утверждение верно? Есть ли ловушки, за которыми нужно следить?

Связанный: PEP435 1 2 3 4 5

1 Ответ

1 голос
/ 03 июля 2019

При замене старого кода вам может понадобиться использовать IntEnum (или StrEnum или ...).Например:

>>> OldBreakfast.HAM == 0
True

>>> NewBreakfast.HAM == 0
False

, но:

>>> IntBreakfast.HAM == 0
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...