[解決済み] Pythonで変数の引数(kwargs)からクラスの属性を設定するにはどうすればよいか
2022-04-27 17:27:47
質問
コンストラクタ(または他の関数)で可変数の引数を取り、それを条件付きでクラスの属性として設定するクラスがあるとします。
手動で設定することもできますが、pythonでは可変パラメータは十分一般的なので、これを行うための共通のイディオムがあるはずです。 しかし、私はこれを動的に行う方法がわかりません。
evalを使った例もありますが、それだと安全とは言えません。 ラムダを使うのがいいのでしょうか?
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])
解決方法は?
を更新することができます。
__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)
を使えば、あらかじめキーをフィルタリングすることができます。
iteritems
代わりに
items
もしまだPython 2.xを使用しているならば)。
関連
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み] Pythonスクリプトのプロファイリングはどのように行うのですか?
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] リストを反転させるには?
-
[解決済み] Pythonで'Enum'を表現するにはどうしたらいいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み] Pythonの「名前付きタプル」とは何ですか?
-
[解決済み】データクラスとは何ですか、一般的なクラスとどう違うのですか?