Python Enum
In this page:
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?
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
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
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
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
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)
Chapter Quiz — Complete all 12 topics to unlock
0/12 topics done
Complete these topics first: