2015-02-19 16 views
7

Esasen diğer sınıflar için ortak sabitleri tanımlamak için kullanılan bir sınıfa sahibim.Python'da bir sınıf içindeki tüm sabitleri alma

class CommonNames(object): 
    C1 = 'c1' 
    C2 = 'c2' 
    C3 = 'c3' 

Ben de "pythonically" sabit değerlerin tüm almak istiyorum: Bu aşağıdaki gibi görünür. Ben CommonNames.__dict__.values() kullandıysanız ben bu değerleri ('c1' vs.) almak ama gibi başka şeyler olsun: Ben istemiyorum

[<attribute '__dict__' of 'CommonNames' objects>, 
<attribute '__weakref__' of 'CommonNames' objects>, 
None] 

.

Tüm değerleri alabilmek istiyorum çünkü bu kod daha sonra değiştirilecek ve bu değişiklikler hakkında başka yerler bilmek istiyorum.

cevap

9

Sen adlarına filtreleyerek açıkça bu filtrelemek gerekecek: gibi numaralandırma için

>>> class CommonNames(object): 
...  C1 = 'c1' 
...  C2 = 'c2' 
...  C3 = 'c3' 
... 
>>> [value for name, value in vars(CommonNames).iteritems() if not name.startswith('_')] 
['c3', 'c2', 'c1'] 

: Bu, herhangi bir isim bir alt çizgi ile başlatmamak için değerler listesi üretir

[value for name, value in vars(CommonNames).iteritems() if not name.startswith('_')] 

Bunlar, yeni enum library'un enum34 backport'un Python 3.4:

from enum import Enum 

class CommonNames(Enum): 
    C1 = 'c1' 
    C2 = 'c2' 
    C3 = 'c3' 

values = [e.value for e in CommonNames] 
'a eklenmesiyle daha iyi olur.
İlgili konular