可変数の引数を受け取り、条件に応じてそれらをクラス属性として設定するコンストラクター (またはその他の関数) を持つクラスがあるとします。
手動で設定することもできますが、変数パラメータは 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
)。