2011-11-01 12 views
23

これは本当にいくつかの質問です:名前空間、argparse、および利用

  1. はargparseではなく、辞書の名前空間を使用する理由はありますか?

  2. 私には、__init__(self, init_method, *args)というクラスがあるとします。 init_methodパラメータはinit_functionにクラスの初期化方法を指示し、argパラメータはinitに必要なすべての引数を与えます。引数はメソッドによって異なる場合があります。辞書や名前空間を使うべきですか?

  3. 名前空間を使用すると仮定して、どのように名前空間を__init__()に渡すのですか? arparse

答えて

19
  1. デザイナーが明らかにかかわらず、これは好みの問題かもしれません

    args.arg_name 
    

    ではなく

    args["arg_name"] 
    

    として引数にアクセスする方が便利だろうと感じました。特にNamespaceクラスが標準ライブラリーにないという事実を考慮して、​​のものを除いて、私は幸いに辞書に行きました。

  2. 辞書を使用します。

  3. 実際にネームスペースが必要な場合は、init_function(**args.__dict__)を使用できますが、推奨しません。

67

vars()を使用して辞書に名前空間を変換するのは簡単です:

>>> vars(args) 
+1

私はこれを使用していますので、私は、スタンドアロンのユーティリティまたは機能のいずれかであるモジュールを持つことができます。 argparseからargsを取得するには、my_func(** vars(parser.args))を呼び出すことができます。ただし、パラメータ名をargparseで定義した名前と一致させる限り –