enum - स्ट्रिंग रूपांतरण पर एनम का मूल्य प्राप्त करना


108

मेरे पास enum परिभाषित है

from enum import Enum


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


print(D.x)

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

D.x

इसके बजाय मैं चाहता था कि enum का मूल्य प्रिंट हो

1

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


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

जवाबों:


188

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

print(D.x.value)

गणन सदस्यों और उनके गुण अनुभाग के लिए प्रोग्रामेटिक पहुँच देखें :

यदि आपके पास कोई एनम सदस्य है और उसके नाम या मूल्य की आवश्यकता है:

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

__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

जब मैं इसे पूर्णांक मान से तुलना करता हूं, तो यह ऑब्जेक्ट के रूप में लौटता है। उदाहरण के लिए: if D.x == 10: ...। पूर्णांकों के लिए मुझे क्या दृष्टिकोण रखना चाहिए?
alper

@alper: बिल्कुल उसी तरह; D.xएनम ऑब्जेक्ट है, D.x.valueएक पूर्णांक मान है। यदि आपके पास एनुमर मान पूर्णांक की तरह काम करने चाहिए, तो उस IntEnumप्रकार का उपयोग करें , जहां प्रत्येक तत्व उप-वर्ग है intऔर इसलिए IntEnumD.x == 10काम करेगा।
मार्टिन पीटर्स

मैंने जोड़ा है def __eq__(self, other): return int(self.value) == otherऔर def __int__(self): return int(self.value)फिर भी मुझे लगता है कि मुझे उन .valueमामलों पर उपयोग करना होगा जब मैं तुलना नहीं करता हूं
एलपर

@alper: यह __eq__लागू नहीं होता otherहै जब एक और एनम मूल्य होता है; D.x == D.y, जहां D.x.value == D.y.valueसही होगा, उदाहरण के लिए विफल होगा। ऐसा लगता है कि आप वहां के IntEnumबजाय उपयोग करना चाहते हैं Enum
मार्टिन पीटर्स

7

मैंने निम्नलिखित का उपयोग करके पहुंच को लागू किया

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

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

अब मैं बस कर सकता हूं

print(D.x)1परिणाम के रूप में पाने के लिए ।

तुम भी उपयोग कर सकते हैं self.nameमामले में आप प्रिंट करना चाहता था xके बजाय 1


2
क्यों स्ट्रिंग स्वरूपण और self._value_? return str(self.value)अधिक सीधा है।
मार्टिन पीटर्स

1
मैंने सिर्फ स्रोत को देखा और यह यह था कि इसे कैसे लागू किया जाता है, हालांकि आप सही हैं और self.valueक्लीनर हैं।
वैभव मिश्रा

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

@MartijnPieters ने सहमति व्यक्त की
वैभव मिश्रा

0

Enumस्ट्रिंग का उपयोग करके खोज करने पर मुझे यह पृष्ठ मिला । मुझे पता है कि यह इस कणिकीय प्रश्न में नहीं पूछा जा रहा है लेकिन शीर्षक इसे 'सुझाव' देता है।

स्ट्रिंग का उपयोग करके एनम प्राप्त करने के लिए आप निम्नलिखित कार्य कर सकते हैं:

from enum import Enum


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


print(D["x"])  # <D.x: 1>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.