PythonでEnumに状態を追加する
この辺読めば終わり。
https://docs.python.org/3/library/enum.html#planet
http://xion.io/post/code/python-enums-are-ok.html
Enum
のサブクラスを使って定義する
1 2 3 4 |
class Color(Enum): red = 1 green = 2 blue = 3 |
redなら「赤」といった色名を返したい場合、どうするか?
1 2 3 4 5 6 7 8 9 10 11 12 |
class Color(Enum): red = 1 green = 2 blue = 3 def japanese_name(self): if self.value == 1: return '赤' if self.value == 2: return '緑' if self.value == 3: return '青' |
みたいなのはアレな気がする。。
__new__
でインスタンスを返すときにプロパティとして追加してやれば良いみたい。
1 2 3 4 5 6 7 8 9 10 |
class Color(Enum): red = (1, '赤') green = (2, '緑') blue = (3, '青') def __new__(cls, value, japanese_name): obj = object.__new__(cls) obj._value_ = value obj.japanese_name = japanese_name return obj |
Color.red.japanese_nameで赤が得られる。
ドキュメントのPlanetに書いてる__init__
を拡張するやり方でやってみたけどエラー吐いた。。謎。