Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonオブジェクトの内部を確認する方法|type()・dir()など組み込み関数の使い方

Pythonオブジェクトの内部情報を確認するための組み込み関数

Pythonには、任意のオブジェクトが持つ属性(アトリビュート)プロパティメソッドなどの内部情報を調査するための強力な組み込み関数群が標準で用意されています。デバッグやコードの理解、リフレクション処理を行う際に非常に役立ちます。

主な組み込み関数は以下の通りです。

  • type() — オブジェクトの型(クラス)を返す
  • dir() — オブジェクトの属性・メソッドの一覧を返す
  • id() — オブジェクトの一意な識別値を返す
  • getattr() — 指定した属性の値を取得する
  • hasattr() — 属性が存在するかどうかを判定する
  • globals() — 現在のグローバル名前空間を辞書で返す
  • locals() — 現在のローカル名前空間を辞書で返す
  • callable() — オブジェクトが呼び出し可能かどうかを判定する

中でも type()dir() は、それぞれ「オブジェクトの型を特定する」ことと「オブジェクトが持つ属性のセットを把握する」ことに特に有用です。

type():オブジェクトの型を確認する

type() にオブジェクトを渡すと、そのオブジェクトが属するクラスを返します。

x = 42
print(type(x))          # <class 'int'>
print(type("hello"))    # <class 'str'>
print(type([1, 2, 3]))  # <class 'list'>

dir():属性とメソッドの一覧を取得する

dir() を使うと、オブジェクトが利用できるすべての属性名・メソッド名を文字列のリストとして確認できます。

s = "hello"
print(dir(s))
# ['__add__', '__class__', ..., 'capitalize', 'upper', ...]

id():オブジェクトの識別値を調べる

id() はオブジェクトごとに割り当てられる一意な整数値を返します(CPython実装ではメモリアドレスに対応します)。同一オブジェクトかどうかの判定などに使えます。

a = [1, 2]
b = a
print(id(a) == id(b))  # True(同じオブジェクトを参照している)

getattr() と hasattr():属性の取得と存在チェック

hasattr() で属性の有無を安全に確認し、getattr() でその値を取り出せます。

s = "hello"
print(hasattr(s, "upper"))       # True
print(getattr(s, "upper")())     # HELLO

globals() と locals():名前空間の中身を見る

globals() は現在のモジュールレベルの変数一覧を、locals() は現在のスコープ内の変数一覧をそれぞれ辞書形式で返します。

callable():呼び出し可能かどうかを判定する

callable() は、オブジェクトが関数やメソッドのように呼び出せる場合は True を返します。

print(callable(print))  # True
print(callable(42))     # False

まとめ

これらの組み込み関数を組み合わせることで、Pythonオブジェクトの型・属性・メソッド・名前空間といった内部構造を簡単に調査できます。特に type()dir() の2つを使いこなせば、未知のオブジェクトの挙動を素早く把握できるようになり、デバッグ効率が大きく向上します。

  1. PythonでKeyError例外をキャッチする方法をわかりやすく解説

    Pythonでは、辞書(dict)に存在しないキーを使って値へアクセスしようとすると、KeyError例外が発生します。この記事では、try-except文を使ってKeyErrorをキャッチし、例外の種類や詳細情報を確認する方法を解説します。 KeyErrorが発生する仕組み 次のコードは、辞書に存在しないキー c で値を取得しようとしているため、KeyErrorが発生します。sys.exc_info() を使うと、発生した例外の型などの情報を取得できます。 import sys try: s = {a: 5, b: 7}[c] except: print(sys.exc_i

  2. JSONオブジェクトをPython関数の引数として渡す方法

    Pythonでは、JSON形式の文字列をそのまま関数に渡し、関数内でjson.loads()を使って辞書(dict)に変換して扱うことができます。以下に、JSONオブジェクトを関数のパラメータとして渡す基本的な例を示します。サンプルコードimport json json_string = {name:Rupert, age: 25, desig:developer} print type(json_string) def func(strng): a = json.loads(strng) print type(a) for k, v in a.iteritems(