2014-06-30 7 views
29

मैं enum निम्नलिखित है स्ट्रिंग रूपांतरण पर enum का मूल्य परिभाषितअजगर enum - हो रही

from enum import Enum 


class D(Enum): 
    x = 1 
    y = 2 


print(D.x) 

अब मुद्रित मूल्य

D.x 

बजाय मैं enum का मूल्य चाहता था होना मुद्रित करने के लिए

1 
है

इस कार्यक्षमता को प्राप्त करने के लिए क्या किया जा सकता है।

+3

'प्रिंट (डी.एक्स.एवल्यू)' –

+0

मुझे एक्सेस पैरामीटर को स्पष्ट करना चाहिए, मुझे डी.एक्स.एवल्यू चीज पता है, मैं चाहता हूं कि डी.एक्स स्ट्रिंग रूपांतरण मूल्य वापस करने के लिए, क्षमा करें यदि प्रश्न स्थिति को स्पष्ट नहीं करता है। –

उत्तर

48

आप enum ऑब्जेक्ट प्रिंट कर रहे हैं। .value विशेषता का उपयोग करें अगर आप सिर्फ मुद्रित करने के लिए है कि चाहता था:

आप एक enum सदस्य है और उसके नाम या मूल्य की जरूरत है:

print(D.x.value) 

Programmatic access to enumeration members and their attributes section देखें

>>> 
>>> member = Color.red 
>>> member.name 
'red' 
>>> member.value 
1 

आप अपने enum के लिए __str__ विधि जोड़ सकते हैं, यदि आप चाहते थे कि एक कस्टम स्ट्रिंग प्रस्तुति प्रदान करें:

class D(Enum): 
    def __str__(self): 
     return str(self.value) 

    x = 1 
    y = 2 

डेमो:

>>> from enum import Enum 
>>> class D(Enum): 
...  def __str__(self): 
...   return str(self.value) 
...  x = 1 
...  y = 2 
... 
>>> D.x 
<D.x: 1> 
>>> print(D.x) 
1 
+0

मैं बिल्कुल ऐसा नहीं करना चाहता, एक चीज मैंने एनम क्लास को ओवरराइड किया है '__str__ विशेषता –

+0

@ वैभव मिश्रा: यह भी एक विकल्प है; हालांकि, मैं अभी भी '.value' विशेषता को मुद्रित करने पर विचार करता हूं। –

+0

दिया गया उदाहरण केवल एक सरलीकृत रूप था, मेरे वर्तमान कोडबेस में, enum को स्ट्रिंग फॉर्म में हर समय एक्सेस किया जाता है और प्रत्येक बार कोई मान करने से बहुत अच्छा नहीं लगता है। आपके उत्तर के लिए धन्यवाद। –

1

मैं का उपयोग कर निम्नलिखित

class D(Enum): 
    x = 1 
    y = 2 

    def __str__(self): 
     return '%s' % self._value_ 

अब मैं सिर्फ

प्रिंट D.x प्रिंट प्राप्त करने के लिए क्या कर सकते हैं का उपयोग लागू किया।

+0

की बजाय __index __() फ़ंक्शन जोड़ें स्ट्रिंग स्वरूपण और 'self._value_' क्यों? 'वापसी str (self.value) 'अधिक सरल है। –

+1

मैंने अभी स्रोत को देखा और इस तरह इसे लागू किया गया, हालांकि आप सही हैं और 'self.value' क्लीनर है। –

+2

एकल-अंडरस्कोर विशेषता जेनरेट एनम कक्षा में आंतरिक हैं; दस्तावेजी विशेषता के लिए बेहतर छड़ी (जो एक विशेष वर्णनकर्ता होता है ताकि आप अभी भी अपने मूल्य प्रकार के नाम के रूप में 'मान' का उपयोग कर सकें)। –

संबंधित मुद्दे