Python3でEnumを継承しようと思ったけどできなかった話
Pythonではほぼclassと同様の構文でEnumを使うことができますが、じゃあclassと同様に継承ができるのか試してみたという話です。結論から言うとできません。
こういうことをやってみました
まず Prop
というEnumを以下の様に定義します。
from enum import Enum, auto
class Prop(Enum):
good = auto()
bad = auto()
次に Prop
を継承して ChildProp
を定義します。
class ChildProp(Prop):
medium = auto()
acceptable = auto()
ChildProp
を以下の様に使ってみます。
print(f'good: {ChildProp.good}')
print(f'bad: {ChildProp.bad}')
print(f'medium: {ChildProp.medium}')
print(f'acceptable: {ChildProp.acceptable}')
結果
結果は以下の様になりました。
Traceback (most recent call last):
File "<stdin>", line 16, in <module>
File "<stdin>", line 8, in main
File "/usr/local/Cellar/python@3.9/3.9.2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/enum.py", line 167, in __prepare__
metacls._check_for_existing_members(cls, bases)
File "/usr/local/Cellar/python@3.9/3.9.2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/enum.py", line 542, in _check_for_existing_members
raise TypeError(
TypeError: ChildProp: cannot extend enumeration 'Prop'
enumerationは継承できないと言われました。なぜかと思って調べてみたところ、基本的にEnumは継承できないらしいです (参考)。