Python の列挙型: メソッド引数で強制する方法 質問する

Python の列挙型: メソッド引数で強制する方法 質問する

私は以下のコード (Java) のように、Python で列挙型を使用したいと考えています。私は 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 メソッドに列挙型のみを提供するように強制するにはどうすればよいですか?

ベストアンサー1

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

おすすめ記事