2017-07-25 43 views
3

我正在與戴森風扇合作,並試圖編寫一個可以提高風扇速度的功能。枚舉對象FanSpeed具有以下成員。當I [在風扇速度打印(ⅰ),其中i]執行我得到:如何爲枚舉對象實現遞增函數?

FanSpeed.FAN_SPEED_1 
FanSpeed.FAN_SPEED_2 
FanSpeed.FAN_SPEED_3 
FanSpeed.FAN_SPEED_4 
FanSpeed.FAN_SPEED_5 
FanSpeed.FAN_SPEED_6 
FanSpeed.FAN_SPEED_7 
FanSpeed.FAN_SPEED_8 
FanSpeed.FAN_SPEED_9 
FanSpeed.FAN_SPEED_10 

所以第一個枚舉對象(以上)的名稱爲FAN_SPEED_1(FanSpeed.FAN_SPEED_1.name),並且具有的 「0001」(FanSpeed.FAN_SPEED_1.value)的值,等等。

設定速度函數(在本例中是5):

fan.set_configuration(fan_mode=FanMode.FAN, fan_speed=FanSpeed.FAN_SPEED_5) 

我不能找出如何編寫獲取當前速度的函數,然後將其設置爲一個較高的水平。我試過了:

1 /將枚舉對象作爲一個字符串處理,並用一個較高的數字(字符類型)替換最後一個字符。儘管這種方法不適用於枚舉對象。

2尋找某種類型的增量或下一個函數,但這些似乎並不存在枚舉對象。

+0

如何從風扇配置訪問當前速度?你可以在你的列表中搜索這個結果的索引,然後增加/減少1或更多 – PRMoureu

+0

另一個重複,但使用不同的技術:['獲取下一個枚舉器常量/屬性](https://stackoverflow.com/a/35905666/208880) –

+1

就我個人而言,我發現這個問題和答案更簡潔,更容易圍繞我的頭,而不是引用作爲副本。 – MikeyE

回答

5

因此,讓我們用從Python文檔的例子:

from enum import Enum 
class Color(Enum): 
    RED = 1 
    GREEN = 2 
    BLUE = 3 

current_color = Color.RED 
new_color = Color(current_color.value + 1) 
>>> new_color == Color.GREEN 
True 

謝謝,我還沒有與枚舉類型玩,所以這是一個很好的學習經驗。

+0

謝謝,讓它工作。小記 - 值是字符串像「0001」,所以我必須採取最後一個字符,轉換爲int,增加1,然後添加「000」回來。除此之外,答案是完美的.. – megashigger

+0

好的答案,有一個投票。 :) –

+0

謝謝。我喜歡原文的答案,因爲它適用於所有情況,尤其是這一個。 @marlonmisra我幾乎提供了一個答案,但我不確定這是否是問題。即使我喜歡我的解決方案,我也會與其他答案一起去。我很驚訝,這不是一個內置的方法。 –