Posted at

Pythonでリフレクション

More than 5 years have passed since last update.

Pythonでリフレクションを使うには、下記の組み込み関数を覚えておくと良いです。

#objectにnameの属性があるかを返す

hasattr(object, name)

#object中のname属性を返す。defaultはname属性がない場合に返す値を指定できる
getattr(object, name[, default])

#objectが呼び出し可能であればTrueを返す。Trueの場合、object()で実行できる。
callable(object)

#objectから有効な属性のリストを返そうと試みる
dir([object])

使い方はこういう感じになります。

例えば、ある属性の値を取得して返すかメソッド実行して返すかのいずれかを行う場合。

if hasattr(object, name):

attr = getattr(object, name)
if callable(attr):
return attr()
else:
return attr