🌊

Python: Enumクラスを拡張する

2021/10/08に公開

環境

  • Python 3.9.7

やりたいこと

今、PetというEnumクラスがあります。

from enum import Enum
class Pet(Enum):
    dog=1
    cat=2

このPetクラスを拡張して、AnimalというEnumクラスを定義したいです。
しかし、Petクラスを継承するとエラーが発生します。

class Animal(Pet):
    cow=3


# ⇒ TypeError: Animal: cannot extend enumeration 'Pet'    

継承できない旨は、公式サイトにも記載されています。

Also, subclassing an enumeration is allowed only if the enumeration does not define any members.

https://docs.python.org/ja/3/library/enum.html#restricted-enum-subclassing

解決方法

Enum()を呼び出して、動的にEnumクラスを生成します。

tmp = {e.name:e.value for e in Pet} | {"cow": 3}
Animal = Enum("Animal", tmp)

print([e for e in tmp])
# => [<Animal.dog: 1>, <Animal.cat: 2>, <Animal.cow: 3>]

https://docs.python.org/ja/3/library/enum.html#functional-api

参考情報

https://stackoverflow.com/questions/33679930/how-to-extend-python-enum

GitHubで編集を提案

Discussion