This question already has answers here:
Moving from one enum state to the next and cycling through

(3个答案)


3年前关闭。




我正在使用Dyson风扇,正在尝试编写增加风扇速度的函数。枚举对象FanSpeed具有以下成员。当我在FanSpeed中执行[printi]时,我得到:
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/寻找某种增量或下一个函数,但对于枚举对象似乎不存在。

最佳答案

因此,让我们使用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
谢谢,我还没有玩过Enum类型,所以这是一个很好的学习经历。
如果要对非整数值执行此操作,则可以执行以下操作:
class Color(Enum):
    red = "0001"
    blue = "0002"


def get_next_color(current_color):
    current_color_idx = list(Color).index(current_color)
    next_color_idx = (current_color_idx + 1) % len(Color)
    next_color = list(Color)[next_color_idx]
    return next_color

关于python - 如何为枚举对象实现增量功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45295102/

10-12 14:28