2014-10-26 15 views
7

Giả sử tôi có một điều tra viên, có thể nhận được tài sản sau đây không? Vì vậy, nếu tôi có today=Days.Sunday tôi có thể làm điều gì đó như tomorrow=today.next()?Nhận số/hằng số điều tra tiếp theo

dụ:

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

Tôi biết tôi có thể sử dụng các bộ (như dưới đây) để làm một cái gì đó giống như tomorrow=today[1], nhưng tôi đã hy vọng có một cái gì đó được xây dựng trong hoặc thanh lịch hơn.

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

tạo ra một số loại iterator? –

+0

Cảm ơn @PadraicCunningham, điều đó có hiệu quả hơn giải pháp tuple mà tôi có không? Tôi thích bạn hơn, tôi chỉ tò mò nếu nó sẽ tiết kiệm bộ nhớ hoặc thời gian chạy :) – Parker

Trả lời

7

Chắc chắn rồi.

Chỉ cần thêm chức năng mong muốn đến lớp Days của bạn:

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] 

và sử dụng:

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

Bạn có thể tạo một từ điển để tra cứu ngày hôm sau như vậy:

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

kiểm tra nhanh:

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

In [14]: nxt[Days.Sat] 
Out[14]: <Days.Sun: 'Su'> 
Các vấn đề liên quan