2014-06-30 27 views
29

dize dönüşüm enum alma değeriPython enum - Ben enum şu var

from enum import Enum 


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


print(D.x) 

şimdi baskılı değer

D.x 

yerine ben olmak

1 
yazdırmak enum değerini istedik olduğu belirlenen

bu işlevselliği elde etmek için neler yapılabileceğini.

+3

'print (D.x.değer)' –

+0

Erişim parametrelerini açıklığa kavuşturmalıyım, D.x.value şeyini biliyorum, istediğim şey, değeri döndürmek için D.x dizgisi dönüşümü, sorunun açık olmaması durumunda özür dilerim. –

cevap

48

Sen enum nesne yazdırıyorsunuz. Bir enum üyeye sahip ve adını veya değerini gerekiyorsa

:

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

print(D.x.value) 

Programmatic access to enumeration members and their attributes section bakınız: sadece o yazdırmak istiyorsa .value özelliğini kullanmak Tek istediğinin özel bir dize temsilini sağlamak olduğu takdirde

sen, enum bir __str__ yöntemi ekleyebilirsiniz:

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

ben tam olarak bunu istemiyorum, ben yaptım bir şey geçersiz kılma enum sınıfı __str__ nitelik –

+0

@VaibhavMishra geçerli: Yani var da bir seçenek; yine de, sadece ".value" özniteliğini yazdırmayı düşünürdüm. –

+0

verilen örnekte, yalnızca basitleştirilmiş şekli, benim şimdiki kod temeli, enum çok iyi görünmüyor dize formu ve bir değer yapıyor her şey her zaman erişilir edildi. Cevabınız için teşekkürler. Liste endeksleri bir __index __() işlevini yerine __str __ ekledikçe Enum kullanmak için –

1

aşağıdaki

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

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

şimdi sadece

baskı D.x baskı almak için yapabileceğiniz kullanarak erişimi uyguladı.

+0

Neden dize biçimlendirme ve 'self._value_'? 'dönüş str (self.value)' daha basittir. –

+1

Sadece kaynağa baktım ve bu nasıl uygulandı, ancak siz haklısınız ve 'self.value' daha temiz. –

+2

Tek alt çizgi öznitelikleri oluşturulan enum sınıfının iç kısmıdır; Belgelendirilmiş özniteliklere daha iyi durun (bu, özel bir tanımlayıcı olarak olur, bu nedenle de 'value'i enum türünüzde bir ad olarak kullanabilirsiniz). –