Pythonで可変引数(kwargs)からクラス属性を設定するにはどうすればいいですか?質問する

Pythonで可変引数(kwargs)からクラス属性を設定するにはどうすればいいですか?質問する

可変数の引数を受け取り、条件に応じてそれらをクラス属性として設定するコンストラクター (またはその他の関数) を持つクラスがあるとします。

手動で設定することもできますが、変数パラメータは Python では一般的なので、これを行うための一般的な慣用句があるはずです。ただし、これを動的に行う方法がわかりません。

eval を使用した例がありますが、これは安全とは言えません。これを行う適切な方法を知りたいのですが、おそらく lambda を使用するのでしょうか?

class Foo:
    def setAllManually(self, a=None, b=None, c=None):
        if a!=None: 
            self.a = a
        if b!=None:
            self.b = b
        if c!=None:
            self.c = c
    def setAllWithEval(self, **kwargs):
        for key in **kwargs:
            if kwargs[param] != None
                eval("self." + key + "=" + kwargs[param])

ベストアンサー1

__dict__キーワード引数を使用して、属性 (インスタンス属性を辞書の形式で表す)を更新できます。

class Bar(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

次の操作を実行できます。

>>> bar = Bar(a=1, b=2)
>>> bar.a
1

そして、次のようなものになります:

allowed_keys = {'a', 'b', 'c'}
self.__dict__.update((k, v) for k, v in kwargs.items() if k in allowed_keys)

事前にキーをフィルタリングすることができます (まだ Python 2.x を使用している場合iteritemsは の代わりにを使用しますitems)。

おすすめ記事