web-dev-qa-db-ja.com

kwargsとして機能するようにargparse引数を渡す方法は?

私は次のように定義されたクラスを持っています

_class M(object):
    def __init__(self, **kwargs):
        ...do_something
_

argparse.parse_args()の結果があります。例:

_> args = parse_args()
> print args
Namespace(value=5, message='test', message_type='email', extra="blah", param="whatever")
_

この名前空間の値(_message_type_を除く)を渡して、クラスMのインスタンスを作成したいと思います。私が試してみました

_M(args)
_

エラーが発生しました

_TypeError: __init__() takes exactly 1 argument (2 given)
_

わかりません。どうやって

  1. argsのリストから値_message_type_を削除します
  2. M(value=5, message='test', extra="blah", param="whatever")を直接入力するかのように値を渡します。
30
Alex

代わりに、vars(args)の結果を渡す必要があります。

_M(**vars(args))
_

vars() function は、名前空間インスタンスの名前空間(その___dict___属性)を辞書として返します。

M.__init__()内では、_message_type_キーを無視してください。

39
Martijn Pieters