abseil-py には DEFINE_enum_class が存在する
Jan. 3, 2023, 9:10 a.m. edited Jan. 3, 2023, 9:12 a.m.Python の引数処理ライブラリは docopt や click など色々あるが、 abseil-py も割と有名である(元々 Google 製のためか TensorFlow をインストールすると一緒についてくる)。
基本的な使い方はドキュメントにあるとおりだが、見てわかるように DEFINE_enum
は与えられた文字列リストから選択する形式であり、 Python の enum class を用いることができない。
そのため Issue: DEFINE_enum supports Enum? #207 を立てたのだが、驚くべきことにドキュメントには存在しない DEFINE_enum_class
が存在すると回答された。
そこでさっそく試したところ、以下のように利用することができた。
from enum import Enum, auto
from absl import app, flags
class Color(Enum):
RED = auto()
GREEN = auto()
flags.DEFINE_enum_class('color', Color.RED, Color, 'set color')
FLAGS = flags.FLAGS
def main(argv_):
if FLAGS.color == Color.RED:
print('color is red')
if __name__ == '__main__':
app.run(main)
実行すると、
$ python main.py --help
USAGE: main.py [flags]
flags:
main.py:
--color: <red|green>: set color
(default: 'red')
Try --helpfull to get a list of all flags.
$ python main.py --color red
color is red
としっかり動作した。
Tags
- #Python (26)
- #量子力学 (23)
- #量子情報 (21)
- #Unity (11)
- #Outer Wilds (11)
- #Mac (9)
- #数学 (8)
- #AoE2 (8)
- #Linux (6)
- #Quantum Zoo (6)
- #意識 (5)
- #シミュレーション (5)
- #NumPy (5)
- #Bash (5)
- #相対論 (4)
- #Docker (4)
- #Android (4)
- #Qiskit (4)
- #Rust (3)
- #PyO3 (3)
- #GitHub (3)
- #Django (2)
- #情報理論 (2)
- #LaTeX (2)
- #AR (2)
- #Git (2)
- #iOS (2)
- #C++ (2)
- #正規表現 (2)
- #電磁気学 (1)
- #Google Drive (1)
- #Overleaf (1)
- #Let's Encrypt (1)
- #ポケモン (1)
- #AdMob (1)
- #Autoya (1)
- #docopt (1)
- #SymPy (1)
- #AWS (1)
- #Twitter (1)
- #URP (1)
- #iMovie (1)
- #論文 (1)
- #PyTorch (1)
- #C# (1)
- #Vim (1)