これは、異なる観点からは、argparseモジュールを使用した2つの相互に排他的なオプションのPythonでのデフォルトオプションの設定によく似ていることを理解しています(そしてそこに与えられた答えは役に立たないようです)。
コードブロック(パーサーはargparse.ArgumentParserのインスタンスです):
mutex_group = parser.add_mutually_exclusive_group()
mutex_group.add_argument("--show", action="store_true",
dest="show", default=True)
mutex_group.add_argument("--insert", action="store_true",
dest="insert")
opts = parser.parse_args()
どちらも指定されていない場合、--show
または指定されていない場合--insert
はデフォルトで--show
(したがってdefault=True
)に設定しますが、--insert
使用されている場合はopts.show
、相互に排他的なブロックの一部であるにもかかわらず、(デフォルトのために)trueに設定されます。
opt.show
現在のコードは、Trueであるかどうかをテストするときに、他のオプションが設定されていないことを確認します。
if opts.show and not opts.insert:
do_something()
elif opts.insert:
do_something_else()
ただし、これはスケーリングされないため(相互に排他的なグループに追加するとどうなるかなど) 、デフォルトのままにして、--delete
他のすべての変数をfalseにするより良い方法を探しています。opts.show
argparseのドキュメントを読むと、カスタムアクションが進むべき道だと思いますが、その中から相互に排他的なグループの他のメンバーにアクセスする方法がわかりません(理論的には、それらを繰り返し処理し、デフォルトを反転させることができます。残りのいずれかが設定されました)。もう1つのオプションは、if条件を逆にすることですが、これはクリーンではないようです(デフォルトが変更された場合、ifステートメントの順序も変更する必要があります)。