PythonのEnumは非常に便利な機能で、一意の値に紐付けられたシンボリックな名前の集合を作成することができます。しかし、デフォルトでは、Enumのメンバーはそれぞれのvaluekeyに取得できますが、それ以外の値をkeyにすることはできません。

以下に、通常のEnumの利用方法を示します。

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

# 1や2といったvalueをkeyにして各メンバーにアクセスできます
color = Color(1)
print(color)  # Color.RED

しかし、例えばColor('red')Color('赤')でもアクセスできたら、Enumの可能性が広がります。そのためには、通常のEnumを拡張する必要があります。

以下に、keyを拡張したEnumの実装を示します。

from enum import Enum

class Color(Enum):
    def __new__(cls, value, en, ja):
        obj = object.__new__(cls)
        obj._value_ = value
        cls._value2member_map_.update({en: obj, ja: obj})
        return obj
    RED = (1, 'red', '赤')
    GREEN = (2, 'green', '緑')
    BLUE = (3, 'blue', '青')

# 'red'や'赤'でアクセスすると
color = Color('red')
print(color)  # Color.RED

red = Color('赤')
print(red)  # Color.RED

このように、Enumのkeyを拡張することで、より柔軟なコードを書くことが可能になります。ただし、keyがかぶったりする可能性もありますので、注意が必要です。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です