use*_*074 10 python enums python-2.7
我想在python中使用枚举,如下面的代码(java).我是Python的新手.我在Java中有以下代码,并希望在Python中复制功能:
class Direction {
public enum Direction {LEFT, RIGHT, UP, DOWN}
public void navigate(Direction direction)
switch(direction){
case Direction.LEFT:
System.out.print("left");
break;
case Direction.RIGHT:
System.out.print("right");
break;
case Direction.UP:
System.out.print("up");
break;
case Direction.DOWN:
System.out.print("down");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
如何强制用户只提供Python方法的枚举?
Ala*_*ack 12
Python是动态的和鸭子类型 - 变量可以改变类型,你不能强制类型的方法.
但是,您可以使用方法检查方法体中的类型isinstance().isinstance()将允许用户子类化您enum的未来可扩展性.
例如
# Python 2.x: pip install enum34
from enum import Enum
class Direction(Enum):
LEFT = "left"
RIGHT = "right"
UP = "up"
DOWN = "down"
def move(direction):
# Type checking
if not isinstance(direction, Direction):
raise TypeError('direction must be an instance of Direction Enum')
print direction.value
>>> move(Direction.LEFT)
left
>>> move("right")
TypeError: direction must be an instance of Direction Enum
Run Code Online (Sandbox Code Playgroud)
“ pythonic”要做的就是遵循鸭子输入的原则:尝试接受传递给您的值,而不必大惊小怪。在这种情况下,我不用强制类型,而只是检查每个枚举值的相等性,并对任何无法处理的错误引发错误:
def navigate(direction):
"""Turn toward `direction` (an enum of type `Direction`)"""
if direction == Direction.left:
print("Left")
elif direction == Direction.right:
(etc., etc.)
else:
# Hmm, `direction` does not compare equal to any enum value:
raise ValueError("Invalid direction "+ str(direction))
Run Code Online (Sandbox Code Playgroud)