Python: オブジェクトのプロパティとメソッドの一覧を取得

Pythonでオブジェクトの属性(プロパティとメソッド)の一覧を 取得する場合、組み込み関数のdir関数を使います。

dir()関数は「__dir__」のようなアンダーバー2つで囲まれた 特殊属性と呼ばれる属性も含め、 そのオブジェクトで有効な属性(プロパティとメソッド)のリストを返します。

dir() 組み込み関数 — Python ドキュメント

dir()関数で属性一覧を取得

次のサンプルコードではdir()関数を使って文字列オブジェクトの プロパティとメソッドの一覧を取得しています。 実行結果は大量にあるので一部のみ表示します。

s = "hoge"

print(dir(s))

# 要素数
print(len(dir(s)))
実行結果
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', 

途中省略

'title', 'translate', 'upper', 'zfill']
78

要素数が78個もあります。 全ての結果を見たい場合はご自身の環境で試してみてください。

1行ずつ表示

dir()の実行結果を1行ずつ表示したい場合はfor inを使って次のように記述します。

s = "hoge"

for attr in dir(s):

	print(attr)
実行結果
__add__
__class__
途中省略...
upper
zfill

特殊属性を除いて表示

「__hash__」のような特殊属性を除いて表示したい場合は、 if文を使って次のように記述します。

for attr in dir(s):

	if not attr.startswith("__"):
		print(attr)
実行結果
capitalize
casefold
途中省略...
upper
zfill

dir()の物足りない点

オブジェクトの属性が全て取得できるはありがたいのですが、 dir()関数ではそのオブジェクトがプロパティなのかメソッドなのかまではわかりません。
属性名からある程度は推測できますが、正確にはわからないのがdir()の物足りない所とも言えます。

モジュール、クラス、インスタンスなどのプロパティだけを調べたい場合は、 次の記事も参考になります。 (関連記事: __dict__やvars()でオブジェクトのプロパティを取得

hasattr()関数でピンポイント検索

組み込み関数のhasattr()を使うと、 オブジェクトが指定した属性を持っているかどうかがわかります。 結果はTrue・Falseで返って来ます。

書式
hasattr(オブジェクト, 属性名)

hasattr 組み込み関数 — Pythonドキュメント

hasattr()関数を使ったサンプルコードです。 文字列オブジェクトが属性「count」を持っていて、 属性「number」は持っていないことがわかります。

s = "hoge"

print(hasattr(s, "count"))

print(hasattr(s, "number"))
実行結果
True
False
Python