Python中的枚举:如何在方法参数中强制
我想在python中使用枚举,就像下面的代码(java)一样。我是Python的新手。我用Java编写了以下代码,并希望用Python复制该功能:Python中的枚举:如何在方法参数中强制,python,python-2.7,enums,Python,Python 2.7,Enums,我想在python中使用枚举,就像下面的代码(java)一样。我是Python的新手。我用Java编写了以下代码,并希望用Python复制该功能: class Direction { public enum Direction {LEFT, RIGHT, UP, DOWN} public void navigate(Direction direction) switch(direction){ case Direction.LEFT: S
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;
}
}
如何强制用户只向Python方法提供枚举 Python是动态的,并且是duck类型的——变量可以更改类型,并且不能强制方法使用类型 但是,您可以使用
isinstance()
检查方法体中的类型
isinstance()
将允许用户对enum
进行子类化,以实现将来的扩展性。-见评论
例如
“pythonic”的做法是遵循duck类型的原则:尝试接受传递给您的值,而不要大惊小怪。在这种情况下,我不强制执行类型,而是简单地检查每个枚举值是否相等,并对无法处理的任何内容引发错误:
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))
可能与我看到的相同,但它没有解释(至少对我来说)如何将enum元素作为参数传递,并强制用户使用enum元素,而不是键入原始字符串或不同的值。我已经更新了这个问题,将其作为您问题的重点。理想情况下,您应该已经提供了Python代码,这样我们就可以看到您试图实现的目标。我得到了这一点,现在我非常感谢所有为具有对象类型的语言编写代码的人。谢谢大家的帮助。事实上,带有成员的
Enum
s不能子类化。@EthanFurman噢,哇。我刚刚测试了扩展枚举。当然,你不能-谢谢你的提醒!
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))