2014-10-26 23 views
7

Lets der ki bir numaralandırıcı var, aşağıdaki özelliği elde etmek mümkün mü? Yani today=Days.Sunday olsaydı tomorrow=today.next() gibi bir şey yapabilir miydim?Sıradaki enumerator sabiti/özelliği alın

örnek:

class Days(Enum): 
    Sunday = 'S' 
    Monday = 'M' 
    ... 
    Saturday = 'Sa' 

ben tomorrow=today[1] böyle bir şey yapmak (aşağıda) gibi dizilerini kullanabilirsiniz biliyorum ama ya daha şık yapılı bir şey vardı umuyordum.

class Days(Enum): 
    Sunday = ('S','Monday') 
    Monday = ('M','Tuesday') 
    ... 
    Saturday = ('Sa','Sunday') 
+1

Yineleyici çeşit yaratmak? –

+0

Teşekkür @PadraicCunningham, sahip olduğum tuple çözümden daha verimli olur mu? Ben seninkini daha çok seviyorum, sadece hafızayı kurtarır mı, yoksa zaman harcayacak mıyım diye merak ediyorum :) – Parker

cevap

7

.

class Days(Enum): 

    Sunday = 'S' 
    Monday = 'M' 
    Tuesday = 'T' 
    Wednesday = 'W' 
    Thursday = 'Th' 
    Friday = 'F' 
    Saturday = 'Sa' 

    def next(self): 
     cls = self.__class__ 
     members = list(cls) 
     index = members.index(self) + 1 
     if index >= len(members): 
      index = 0 
     return members[index] 

ve kullanımıdır:

Sadece Days sınıfa istenen işlevsellik eklemek

today = Days.Wednesday 
print(today.next()) 
# Days.Thursday 
2

Ertesi gün şöyle arama için bir sözlük oluşturabilirsiniz:

In [10]: class Days(Enum): 
    Sun = 'Su' 
    Mon = 'M' 
    Tue = 'Tu' 
    Wed = 'W' 
    Thu = 'Th' 
    Fri = 'F' 
    Sat = 'Sa' 

In [11]: days = list(Days) 

In [12]: nxt = dict((day, days[(i+1) % len(days)]) for i, day in enumerate(days)) 

Hızlı testi: Kesinlikle

In [13]: nxt[Days.Tue] 
Out[13]: <Days.Wed: 'W'> 

In [14]: nxt[Days.Sat] 
Out[14]: <Days.Sun: 'Su'> 
İlgili konular