2013-03-04 13 views
19

argparse引数をkwargsとして機能させるには?

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

を次のように私はクラスが定義されていると私は例えば、argparse.parse_args()の結果を持っている:

私は( message_typeを除く)この名前空間の値を渡したい
> args = parse_args() 
> print args 
Namespace(value=5, message='test', message_type='email', extra="blah", param="whatever") 

作成しますクラスMのインスタンスです。私は

M(args) 

を試してみましたが、私は理解していないエラー

TypeError: __init__() takes exactly 1 argument (2 given) 

を持っています。私は直接M(value=5, message='test', extra="blah", param="whatever")を入力しているかのようにはどうすれば

  1. 値にargs
  2. パスのリストから値message_typeを削除することができます。

    M(**vars(args)) 
    

    vars() functionは辞書として名前空間のインスタンス(その__dict__属性)の名前空間を返します。あなたが代わりにvars(args)の結果に渡す必要が

答えて

31

M.__init__()の内部には、単にmessage_typeというキーを無視します。

+1

私が必要としているものとまったく同じです。ありがとう。特定のキーの削除を除いて。私はそれを削除する必要がある、私はこの質問の範囲外の理由でそれを無視することはできません。 – Alex

+2

'vars'で未定義の動作が起こらないように、' arg_dict = dict(k、v)for k、vars(args).items()if k!= "message_type") 'を実行することをお勧めします。 – Alex

+0

@Alex: 'vars'で何が未定義の動作ですか?あなたは 'message_type'キーをそのようにフィルターすることができますが、' vars() 'が未定義の動作をしているわけではありません。 –

関連する問題