मैं Enum4 पुस्तकालय का उपयोग कर रहा हूँ एक एनम वर्ग बनाने के लिए निम्नानुसार है:
class Color(Enum):
RED = 1
BLUE = 2
मैं [1, 2]
कहीं सूची के रूप में छापना चाहता हूं । इसे कैसे प्राप्त किया जा सकता है?
मैं Enum4 पुस्तकालय का उपयोग कर रहा हूँ एक एनम वर्ग बनाने के लिए निम्नानुसार है:
class Color(Enum):
RED = 1
BLUE = 2
मैं [1, 2]
कहीं सूची के रूप में छापना चाहता हूं । इसे कैसे प्राप्त किया जा सकता है?
जवाबों:
आप IntEnum का उपयोग कर सकते हैं :
from enum import IntEnum
class Color(IntEnum):
RED = 1
BLUE = 2
print(int(Color.RED)) # prints 1
किलों की सूची प्राप्त करने के लिए:
enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]
a = [(int(v), str(v)) for v in Color]
और फिर print(a)
।
[(color.value, color.name) for color in Color]
किसी भी प्रकार के मूल्य के साथ Enum का उपयोग करने के लिए, यह प्रयास करें:
कुछ सुधार के साथ अपडेट किया गया ... धन्यवाद @Jeff, आपके टिप से!
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 'GREEN'
BLUE = ('blue', '#0000ff')
@staticmethod
def list():
return list(map(lambda c: c.value, Color))
print(Color.list())
परिणाम के रूप में:
[1, 'GREEN', ('blue', '#0000ff')]
@classmethod
उदाहरण बनाना होगा Color
। यही कारण है कि staticmethod
यहाँ सही विकल्प लगता है।
@classmethod
और उपयोग कर सकते हैं return list(map(lambda c: c.value, cls))
।
@ जेफ के जवाब के आधार पर, classmethod
ताकि आप अपने किसी भी दूत के लिए एक ही कोड का पुन: उपयोग कर सकें , का उपयोग करने के लिए रद्द कर दिया गया :
from enum import Enum
class ExtendedEnum(Enum):
@classmethod
def list(cls):
return list(map(lambda c: c.value, cls))
class OperationType(ExtendedEnum):
CREATE = 'CREATE'
STATUS = 'STATUS'
EXPAND = 'EXPAND'
DELETE = 'DELETE'
print(OperationType.list())
पैदा करता है:
['CREATE', 'STATUS', 'EXPAND', 'DELETE']
वर्ग enum.Enum
एक ऐसा वर्ग है जो आपकी सभी गणना की आवश्यकता को हल करता है, इसलिए आपको बस इसे से विरासत में प्राप्त करने की आवश्यकता है, और अपने स्वयं के क्षेत्रों को जोड़ें। फिर तब से, आपको बस इतना करना है कि इसे कॉल करना है गुण: name
और value
:
from enum import Enum
class Letter(Enum):
A = 1
B = 2
C = 3
print({i.name: i.value for i in Letter})
# prints {'A': 1, 'B': 2, 'C': 3}
तो Enum
एक __members__
हुक्म है। @Ozgur ने जो समाधान प्रस्तावित किया है, वह वास्तव में सबसे अच्छा है, लेकिन आप ऐसा कर सकते हैं, जो एक ही काम करता है, अधिक काम के साथ
[color.value for color_name, color in Color.__members__.items()]
__members__
शब्दकोश काम में आ अगर आप इसे में गतिशील रूप से सामान डालने के लिए ... कुछ पागल स्थिति में चाहता था सकता है।
[संपादित करें]
स्पष्ट रूप __members__
से एक शब्दकोश नहीं है, लेकिन एक नक्शा प्रॉक्सी है। जिसका अर्थ है कि आप इसमें आसानी से आइटम नहीं जोड़ सकते।
आप हालांकि अजीब तरह की चीजें MyEnum.__dict__['_member_map_']['new_key'] = 'new_value'
कर सकते हैं, और फिर आप नई कुंजी का उपयोग कर सकते हैं जैसे MyEnum.new_key
.... लेकिन यह सिर्फ एक कार्यान्वयन विवरण है, और इसके साथ नहीं खेला जाना चाहिए। विशाल रखरखाव लागत के साथ काले जादू का भुगतान किया जाता है।
__members__
? यह एक्सटेंशन का एक दिलचस्प तरीका है जिससे नए Enum
सदस्य बनाए जा सकते हैं। ... टेबल पर एक नया ( मेरे लिए ) विशेषता लाने के लिए अपडाउन किया गया btw ।
_member_names_
एक त्वरित आसान परिणाम के लिए उपयोग करें अगर यह सिर्फ नाम है, यानी
Color._member_names_
इसके अलावा, आपके पास _member_map_
तत्वों का एक ऑर्डर किया गया शब्दकोश है। यह फ़ंक्शन एक रिटर्न देता है collections.OrderedDict
, इसलिए आपके पास है Color._member_names_.items()
और इसके Color._member_names_.values()
साथ खेलना है। उदाहरण के लिए
return list(map(lambda x: x.value, Color._member_map_.values()))
रंग के सभी वैध मान लौटाएगा