Pythonでは、オブジェクトがどのような属性(変数やメソッド)を持っているのかを調べる方法がいくつかあります。
ここでは、それらの方法を基礎から応用まで体系的に詳しく解説します。
目次
dir()
関数で一覧を取得する
最も手軽な方法が dir()
関数です。
x = [1, 2, 3]
print(dir(x))
特徴
- 組み込みメソッドや変数(たとえば
__len__
,append
など)を含む、すべての属性の名前をリストで返します。 - 特殊メソッド(ダンダーメソッド、例:
__init__
)も含まれるため、情報量が多め。
用途
- そのオブジェクトにどんな操作ができるのかざっくり把握したいときに便利。
vars()
関数でユーザー定義属性だけを見る
vars()
はオブジェクトの __dict__
属性(インスタンスの属性を保持する辞書)を返します。
class Dog:
def __init__(self, name):
self.name = name
self.age = 2
dog = Dog("Pochi")
print(vars(dog))
結果例
{'name': 'Pochi', 'age': 2}
特徴
- インスタンスごとの属性(変数)が分かる。
- クラスや組み込みオブジェクトには使えないことがある(TypeErrorが出る)。
hasattr()
/ getattr()
で個別に確認
hasattr()
:属性の有無をチェック
hasattr(dog, 'name') # True
hasattr(dog, 'breed') # False
getattr()
:値を取得(存在しない場合のデフォルト値も指定可)
getattr(dog, 'name') # 'Pochi'
getattr(dog, 'breed', '不明') # '不明'
用途
- オブジェクトの属性が存在するかを条件分岐に使いたいとき
- 属性の動的な取得が必要なとき(文字列で属性名を指定)
__dict__
属性を直接見る
print(dog.__dict__)
これは vars(dog)
と同じで、オブジェクトのインスタンス属性を辞書として取得できます。
補足
- クラス属性(共有属性)は含まれません。
- 継承元の属性やメソッドも含まれない点に注意。
inspect
モジュールを使って詳細分析
標準ライブラリの inspect
を使うと、より深い情報が得られます。
import inspect
print(inspect.getmembers(dog))
特徴
- 属性の名前とその値のペアのリストが得られる
inspect.isfunction
などのフィルタを使ってメソッドだけ抽出も可能
methods = [m for m in inspect.getmembers(dog, predicate=inspect.ismethod)]
print(methods)
実用パターンまとめ
方法 | 概要 | 主な使い所 |
---|---|---|
dir(obj) | すべての属性名の一覧 | 簡単な確認や補完 |
vars(obj) or obj.__dict__ | インスタンス属性の辞書 | 状態の可視化 |
hasattr() / getattr() | 属性の有無と取得 | 安全なアクセス |
inspect.getmembers() | 名前と値のペアで一覧 | 高度な調査やデバッグ |
まとめ

Pythonでオブジェクトの属性を確認する方法には、「概要を知る(dir
)」「具体的な値を取る(getattr
, vars
)」といったレイヤーの違いがあります。
コードの保守やデバッグ、リフレクション的な処理(属性名を変数として持ち回す)を行う場合には、今回紹介した複数の手法を組み合わせることで、より柔軟に対応できます。
以上、Pythonのオブジェクトの属性の確認方法についてでした。
最後までお読みいただき、ありがとうございました。