Python में, एक एनम अनोखे नामों का एक समूह होता है, जो अनोखी और स्थिर वैल्यू से जुड़े होते हैं।
Enums को Enum क्लास से इनहेरिट करके बनाया जाता है।
बिल्ट-इन एनम टाइप enum मॉड्यूल में उपलब्ध होते हैं और Enum क्लास को from enum import Enum से इम्पोर्ट किया जा सकता है।
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
ध्यान दीजिए कि enum के सदस्यों की वैल्यू कोई भी डेटा टाइप हो सकती है, जैसे str, tuple, float आदि।
class Color(Enum):
RED = 'red'
GREEN = 'green'
Enums को फंक्शन कॉल सिंटैक्स से भी बनाया जा सकता है।
from enum import Enum
Animal = Enum('Animal', 'ANT BEE CAT DOG')
list(Animal)
#=> [<Animal.ANT: 1>, <Animal.BEE: 2>, <Animal.CAT: 3>, <Animal.DOG: 4>]
Animal.ANT.value
#=> 1
जब किसी enum में दो सदस्यों को एक ही वैल्यू असाइन की जाती है, तो बाद में असाइन किया गया सदस्य पहले वाले का एलियस बन जाता है। किसी enum के दो अलग-अलग सदस्यों के लिए एक ही नाम इस्तेमाल करने की अनुमति नहीं है।
class Color(Enum):
RED = 1
GREEN = 2
ALIAS_OF_RED = 1
Color.ALIAS_OF_RED
#=> <Color.RED: 1>
एनम के सदस्यों पर इटरेशन मानक for member in सिंटैक्स से किया जा सकता है:
for member in Color:
print((member.name, member.value))
#=> (RED, 1)
#=> (GREEN, 2)
# __members__.items() helps you to loop through alias as well
for member in Color.__members__.items():
print(member)
#=> ('RED', <Color.RED: 1>)
#=> ('GREEN', <Color.GREEN: 2>)
#=> ('ALIAS_OF_RED', <Color.RED: 1>)
Enum के सदस्यों की तुलना is (आइडेंटिटी ऑपरेटर) या is not से की जा सकती है। == या != (इक्वलिटी ऑपरेटर) भी इसी तरह काम करते हैं:
a = Color.RED
a is Color.RED
#=> True
a == Color.RED
#=> True
पूर्णांक वैल्यू असाइन करने के लिए, auto() फंक्शन 1 से शुरू होता है और उसके बाद की वैल्यू अपने आप सेट कर देता है।
class Shape(Enum):
CIRCLE = auto()
SQUARE = auto()
OVAL = auto()
एलियस की अनुमति न देने के लिए (एक ही वैल्यू को अलग-अलग नामों के साथ होने से रोकने के लिए), क्लास डेकोरेटर @enum.unique डेकोरेटर इस्तेमाल किया जा सकता है।
@enum.unique
class Shape(Enum):
CIRCLE = 1
SQUARE = 2
TRIANGLE = 1
#=> ValueError: duplicate values found in <enum 'Shape'>: TRIANGLE -> CIRCLE
किसी दी गई वैल्यू के लिए enum सदस्य एक्सेस करने के लिए यह नोटेशन इस्तेमाल किया जा सकता है: <EnumName>(<value>)।
g = Color(2)
g is Color.GREEN
#=> True
g
#=> <Color.GREEN: 2>
किसी भी मिक्स-इन या डेटा टाइप के साथ Enum क्लास की सबक्लास बनाकर एक कस्टम प्रतिबंधित Enum लिखा जा सकता है।
उदाहरण के लिए:
class StrEnum(str, Enum):
pass
Enum की सबक्लास बनाना तभी अनुमत है जब enum कोई भी सदस्य परिभाषित नहीं करता हो।
ज़्यादा जानकारी और समझ के लिए enum मार्गदर्शिका और enum कुकबुक देखिए।