2014-06-30 3 views
29

Ich habe Enum folgt definiertPython Enum - Gegenwert von ENUM auf String-Konvertierung

from enum import Enum 


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


print(D.x) 

jetzt die gedruckte Wert

ist
D.x 

stattdessen wollte ich den Wert der Enum zu

1 
drucken

was kann getan werden, um diese Funktionalität zu erreichen.

+3

'print (D.x.value)' –

+0

Ich sollte die Zugriffsparameter klären, ich kenne die D.x.value Sache, was ich will ist D.x String-Konvertierung, um den Wert zurückzugeben, tut mir leid, wenn Frage die Bedingung nicht klar. –

Antwort

48

Sie drucken das Enum Objekt. Verwenden Sie das .value Attribut, wenn Sie nur drucken wollte, dass:

print(D.x.value) 

Siehe Programmatic access to enumeration members and their attributes section:

Wenn Sie eine ENUM Mitglied und müssen ihren Namen oder Wert:

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

Sie könnten Ihrer Enumeration eine __str__-Methode hinzufügen, wenn Sie nur eine benutzerdefinierte Zeichenfolgendarstellung bereitstellen möchten:

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

    x = 1 
    y = 2 

Demo:

>>> 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

Ich möchte nicht genau das tun, eine Sache, die ich getan habe, überschreiben enum Klasse '__str__ Attribut –

+0

@VaibhavMishra: Das ist auch eine Option; Ich würde jedoch immer noch nur das Attribut '.value' drucken. –

+0

das angegebene Beispiel war nur eine vereinfachte Form, in meiner aktuellen Codebasis ist die Enumeration immer in String-Form zugänglich und jedes Mal, wenn ein Wert angezeigt wird, sieht nicht sehr gut aus. Danke für deine Antwort. –

1

I umgesetzt Zugang mit den folgenden

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

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

jetzt kann ich nur

Druck D.x den Druck zu erhalten.

+0

Warum die Zeichenfolge Formatierung und 'self._value_'? 'return str (self.value)' ist einfacher. –

+1

Ich habe mir nur die Quelle angeschaut und so wurde es implementiert, aber du hast Recht und 'self.value' ist sauberer. –

+2

Die Single-Underscore-Attribute sind intern in der generierten Enum-Klasse; Halten Sie sich besser an das dokumentierte Attribut (das ein spezieller Deskriptor ist, damit Sie "Wert" als Name für Ihren Enum-Typ verwenden können). –