私は複数の辞書変数を持つクラスを持っています。変数名が関数内の文字列として渡されるクラス変数の辞書パラメータを設定する方法はありますか? " '自己' はunsubscriptableです":Python: 'self'はunsubscriptableです
<?php
class Test:
var1 = { "value": 1 }
var2 = { "value": 2 }
def set_variable(self, var_name, value):
## self.var_name.value = value ### pylint: Instance of 'Test' has no 'var_name' member
self[var_name]["value"] = value ### pylint: 'self' is unsubscriptable ###
instance = Test()
instance.set_variable("var1", 150)
リンターをコーディング中は、というエラーがスローされます。私がコードを実行すると、エラーが出ます: "TypeError: 'Test'オブジェクトは添字付きではありません。この問題を解決するために
一つの方法は、「GETATTR」を使用して、一時的な変数を作成することである:
def set_variable(self, var_name, value):
temp = getattr(self, var_name)
temp["value"] = value
setattr(self, var_name, temp)
しかし、私は上記の、特にはるかに大きい辞書のためのメモリ使用量を増やす醜い解決策であることがわかりました。
また、self [var_name]を多くの場所で使用したいと思います。これを行う方法はありますか?
オーバーライド '__getitem__'と' __setitem__' – thebjorn
を? –
set_variableはクラスメソッドです!コードを読んでいないのですか? –