enum मॉड्यूल (पायथन 3.4+) एन्युमरेशन्स (नामित कॉन्स्टेंट्स के सेट) बनाने के लिए क्लासेस प्रदान करता है।
बुनियादी एनम
from enum import Enum
class Langs(Enum):
Python = 1
Java = 2
Cpp = 3
Ruby = 4
एक्सेस और प्रिंटिंग
>>> Langs.Python
Langs.Python
>>> print(Langs.Python)
Langs.Python
>>> repr(Langs.Python)
''
नाम और मान
>>> x = Langs.Python
>>> x.name
'Python'
>>> x.value
1
इटरेशन
>>> for lang in Langs:
... print(lang.name, lang.value)
Python 1
Java 2
Cpp 3
Ruby 4
मान/नाम से एक्सेस
>>> Langs(3)
>>> Langs['Java']
तुलना
- आइडेंटिटी (
is,is not): समान एनम मेंबर्स के लिए काम करता है। - इक्वलिटी (
==,!=): मान के आधार पर। - ऑर्डरिंग (
<,>): नहीं सपोर्टेड (बेस Enum में)।
>>> x = Langs(2)
>>> y = Langs(4)
>>> x is y
False
>>> x == Langs.Java
True
डुप्लिकेट मान (एलियासेस)
डिफ़ॉल्ट रूप से एक ही मान के कई नाम अनुमत हैं (एलियास):
class Langs(Enum):
Python = 1
Java = 2
Cpp = 3
Ruby = 4
Cplusplus = 3 # Cpp का एलियास
Langs.Cpp #
Langs.Cplusplus # (Cpp ही लौटाता है)
Langs(3) # (पहला परिभाषित)
यूनिक मान लागू करना: @unique
from enum import Enum, unique
@unique
class Langs(Enum):
Python = 1
Java = 2
Cpp = 3
Ruby = 4
# Cplusplus = 3 # ValueError: duplicate values found
IntEnum: इंटीजर के साथ संगत
from enum import IntEnum
class Priority(IntEnum):
Low = 1
Medium = 2
High = 3
print(Priority.High > Priority.Low) # True (इंट की तरह तुलना)
print(Priority.High + 10) # 13 (इंट की तरह अंकगणित)
अन्य एनम टाइप्स
Flag,IntFlag: बिटवाइज़ ऑपरेशन्स के लिए (|,&,^)।auto(): मान ऑटो-असाइन करने के लिए।
from enum import Enum, auto
class Color(Enum):
Red = auto()
Green = auto()
Blue = auto()
# Red=1, Green=2, Blue=3
उपयोग केस
- मैजिक नंबर्स/स्ट्रिंग्स रिप्लेस करना।
- स्टेट मशीन्स, कॉन्फ़िगरेशन ऑप्शन्स।
- टाइप सेफ्टी और IDE सपोर्ट (ऑटोकम्प्लीट)।