Pythonのオブジェクトの属性の確認方法について

Python,イメージ

AI実装検定のご案内

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のオブジェクトの属性の確認方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次