回答:
と呼ばれる組み込み関数がgetattr
ありますsetattr
getattr(object, attrname)
setattr(object, attrname, value)
この場合
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1
と変数x = 'df1'
var1の文字列としての変数df1があると言うことができますか?このようなdfの形状を印刷したい、getattr(x, 'shape')
またはgetattr('df1', 'shape')
。これはgetattrなどの方法では実行できないことを知っています。
new
に廃止されたモジュールを使用するPython 2に適用されます。Pythonには関数setattrとgetattrが組み込まれています。これは、クラスの属性を設定および取得するために使用できます。
簡単な例:
>>> from new import classobj
>>> obj = classobj('Test', (object,), {'attr1': int, 'attr2': int}) # Just created a class
>>> setattr(obj, 'attr1', 10)
>>> setattr(obj, 'attr2', 20)
>>> getattr(obj, 'attr1')
10
>>> getattr(obj, 'attr2')
20
ロジックをクラス内に隠したい場合は、次のように汎用ゲッターメソッドを使用することをお勧めします。
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
def get(self,varname):
return getattr(self,varname)
t = Test()
x = "attr1"
print ("Attribute value of {0} is {1}".format(x, t.get(x)))
出力:
Attribute value of attr1 is 1
それをさらに隠すことができる別のアプローチは、魔法のメソッドを__getattribute__
使用することですが、そのメソッド内で属性値を取得しようとすると解決できない無限ループが発生し続けました。
また、を使用することもできますvars()
。上記の例では、交換可能性getattr(self,varname)
でreturn vars(self)[varname]
はなく、getattr
答えに応じて望ましいかもしれないとの違いは何vars
とsetattr
?。