2016-04-06 29 views
1

enum özelliklerinin kullanıcı dostu unicode temsili, enum şuna benzer:Python 2.7, enum34 ve ben (Flask ve Flask-Yönetici Kullanarak) bir veritabanına farklı seçenekler yazmak için Python 2.7 enum34 kullanıyorum

class Veggie(enum.Enum): 
    celery = 1 
    tomato = 2 
    broccoli = 3 
seçimler gibi değerleri atamak için aşağıdaki gibi

sonra kullanmak: Ben tamsayılar olarak, veritabanında saklanan olmak istiyorum nasıl bu çünkü tamsayılar kullanıyorum

my_veggie = Veggie.celery 

.

Bunu sonlandırdığımda, son kullanıcı için, unicode (Veggie.celery), aşağıdaki dizeyi verecektir: Veggie.celery, ancak bunun yerine kullanıcı dostu bir dize olmasını istiyorum. "Veggie: Kereviz", "Sebzeli: Domates", vb .... Açıkça unicode() tarafından döndürülen dizeyi manipüle edebilirdim, ama sanırım bir sınıf yöntemi kullanarak bunu yapmak için daha kolay, daha temiz bir yol olmalı enum ile yerleşik bir şey? Bunun bir çok yaparsanız

class Veggie(Enum): 
    celery = 1 
    tomato = 2 
    broccoli = 3 
    def __str__(self): 
     return self.__class__.__name__ + ': ' + self.name 

>>> Veggie.tomato 
<Veggie.tomato: 2> 
>>> print Veggie.tomato 
Veggie: tomato 

, kendi temel sınıf oluşturmak:

size Enum sınıfın dize çıkışını değiştirmek isterseniz

cevap

0

, sadece kendi __str__ yöntemi ekleyin, teşekkürler :

class PrettyEnum(Enum): 
    def __str__(self): 
     return self.__class__.__name__ + ': ' + self.name 

ve ondan devralan:

class Veggie(PrettyEnum): 
    celery = 1 
    tomato = 2 
    broccoli = 3