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

我想在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;
  }
}

如何强制用户只向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))