from enum import Enum, auto
class Payment(Enum):
CARD = auto()
CASH = auto()
TRANSFER = auto()
def pay(method: Payment):
if method is Payment.CASH:
...
چرا نه رشته؟ چون "cash" و "Cash" و "نقد" سهتایند ولی هیچکدام خطا نمیدهند — باگِ ساکت. Enum انتخابها را یکی، کامل (IDE و mypy کمکت میکنند) و قابلگسترش میکند. برای مقدارِ نمایشی (value) رشته یا عدد بگذار، ولی مقایسه را همیشه با خودِ عضو (is Payment.CASH) انجام بده.
اشتباه رایج
enum فقط همان ثابتهای سراسریِ مرتبشده است.
تصحیح
ثابتِ سراسری نه عضویت را اجبار میکند نه از غلطِ تایپی جلوگیری میکند؛ enum یک نوعِ واقعی با قرارداد است.