← Back to Python Course | Chapter 11: Advanced Python | Lesson 10 of 12

Python Enum

एक enum नामों की एक तय सूची है, जैसे हफ़्ते के दिन या traffic light के रंग। यह आपको उन values इस्तेमाल करने से रोकता है जो सूची में नहीं हैं।
Syntax
python
from enum import Enum

class EnumName(Enum):
    MEMBER1 = value1
    MEMBER2 = value2

Enum क्या है?

Enum enum module से Enum को subclass करके बनाए गए named constants के एक तय सेट को एक ही type के नीचे group करता है।

बिखरे हुए magic strings या integers (जैसे status = 2) को named members (status = Status.SHIPPED) से बदलना code को ज़्यादा readable और सुरक्षित बनाता है, क्योंकि किसी string literal में typo किसी के द्वारा नहीं पकड़ा जाएगा, पर member नाम में typo पकड़ा जाएगा।

उदाहरण: What is an Enum?

python
from enum import Enum

class Status(Enum):  # groups related named constants together
    PENDING = 1
    SHIPPED = 2

status = Status.SHIPPED
print(status)

Enums पर Iterate करना

किसी Enum class पर iterate करना (for status in Status:) declaration order में हर define किए गए member से गुज़रता है, हर बार आपको उसका नाम और underlying value देता है।

यह validation lists बनाने, dropdown choices भरने, या valid values की एक अलग list खुद maintain किए बिना documentation generate करने के लिए उपयोगी है।

उदाहरण: Iterating Over Enums

python
from enum import Enum

class Status(Enum):
    PENDING = 1
    SHIPPED = 2

for status in Status:  # walks through every member in declaration order
    print(status.name, status.value)

Unique Enum Values

डिफ़ॉल्ट रूप से, Python दो Enum names को बिना किसी शिकायत के एक ही underlying value का alias बनाने देता है, जो उन bugs को छुपा सकता है जहाँ आप वाकई दो अलग states define करना चाहते थे।

class को @unique से decorate करना Python को class-definition समय पर ValueError raise करने पर मजबूर करता है अगर किन्हीं दो members की value एक जैसी हो।

उदाहरण: Unique Enum Values

python
from enum import Enum, unique

@unique  # raises ValueError at class definition if any two members share a value
class Status(Enum):
    PENDING = 1
    SHIPPED = 2

print("No duplicate values allowed")

Enum Comparisons

Enum members एक-दूसरे के मुक़ाबले identity या equality से compare होते हैं (Status.ACTIVE == Status.ACTIVE) पर plain integers या strings के मुक़ाबले नहीं, जब तक आप विशेष रूप से IntEnum या StrEnum से inherit न करें।

यह सख़्ती जानबूझकर है -- यह आपको किसी enum member की गलती से किसी unrelated raw value से तुलना करने से रोकती है जो संयोग से match कर जाए।

उदाहरण: Enum Comparisons

python
from enum import Enum

class Status(Enum):
    ACTIVE = 1
    INACTIVE = 2

print(Status.ACTIVE == Status.ACTIVE)  # True, same member
print(Status.ACTIVE == 1)  # False, an Enum member isn't equal to a plain int

Automatic Values

जब आपके enum members के specific numeric values मायने नहीं रखते -- सिर्फ़ यह कि हर एक unique है -- तो auto() अपने आप 1 से शुरू होकर sequential integers assign कर देता है।

यह आपको members को manually नंबर देने और बीच में नया member डालने पर सब कुछ फिर से नंबर देने से बचाता है।

उदाहरण: Automatic Values

python
from enum import Enum, auto

class Status(Enum):
    PENDING = auto()  # assigned 1 automatically
    SHIPPED = auto()  # assigned 2 automatically

print(Status.PENDING.value, Status.SHIPPED.value)
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.