Web屋さんのアレ

Python大好きなWeb屋のおじさんがぺろぺろ何かを書いてくよ。

【Python】プロパティに対して動的にアクセスする方法

 

まだまだPythonはぺーぺー極まり無いのでメモメモ。。

お代の通り、インスタンス変数等に文字列を使って動的に値を取得する方法で御座います。
getattrっていう関数を使うらしいよ。

getattr (object, name[, default])

指定された object の属性を返します。name は文字列で なくてはなりません。文字列がオブジェクトの属性名の一つであった 場合、戻り値はその属性の値になります。例えば、 getattr(x, 'foobar') は x.foobar と等価です。 指定された属性が存在しない場合、default が与えられている 場合にはしれが返されます。そうでない場合には AttributeError が送出されます。

サンプルソース

class Hoge:
    piyo = 10

instance = Hoge()
print getattr(instance, 'piyo')

 

ちなみに、逆に値をセットする場合はsetattrってのを使うそうです。

setattr (object, name, value)

getattr() と対をなす関数です。引数はそれぞれオブジェクト、 文字列、そして任意の値です。文字列はすでに存在する属性の名前でも、 新たな属性の名前でもかまいません。この関数は指定した値を指定した属性に 関連付けますが、指定したオブジェクトにおいて可能な場合に限ります。 例えば、setattr(x, 'foobar', 123) は x.foobar = 123 と等価です。

サンプルソース

class Hoge:
    piyo = 10

instance = Hoge()
setattr(instance, 'piyo', 200000)

print instance.piyo