9

JSON 構成ファイルをループし、**kwargs を使用するメソッドの引数名としてキー名を使用する方法を見つけようとしています。json 構成ファイルを作成し、キー名をメソッドとして使用しました。正しいメソッドを呼び出すために、キー名に「set_」を追加するだけです。デフォルトのいずれかをループするために、json をディクショナリに変換します。**kwargs に引数名を文字列変数で渡したい。辞書を渡そうとしましたが、それが気に入らないようです。

user_defaults = config['default_users'][user]

for option_name, option_value in user_defaults.iteritems():
    method = "set_" + option_name
    callable_method = getattr(self, method)
    callable_method(user = user, option_name = user_defaults[option_name])

上記の callable_method を呼び出すと、「option_name」が kwarg の実際の名前として渡されます。"shell" = option_name のときに、引数名の文字列名として渡されるように渡したいと思います。以下に例を示します。そうすれば、構成内の任意のキーをループして、何かを達成するために作成するメソッドで探しているものについて心配する必要がなくなります。

def set_shell(self, **kwargs): 
    user  = kwargs['user']
    shell = kwargs['shell']

    ## Do things now with stuff

私はpythonが初めてで、pythonicの方法で物事を行う方法をまだ学んでいます。

4

1 に答える 1

27

あなたが求めていることを正しく理解していれば**、呼び出し側で構文を使用して、kwargs に変換された dict を渡すことができます。

callable_method(user=user, **{option_name: user_defaults[option_name]})
于 2013-04-11T13:26:22.060 に答える