オブジェクトの情報を探る(1) - イントロスペクション

【 目次 】

内省的なpython

Pythonの魅力は内省的という事。

Pythonではすべてがオブジェクト、そしてPythonのオブジェクトは自分が何者であるかを教えてくれる。
この事をPythonはイントロスペクションとか内省的と呼ぶようだ。

pythonのクラスは丸裸、メンバアクセスを保護する手段が無い。
これが、pythonの大きな欠点。
でも、発想の転換をしてみれば、なんでもアクセスできてしまう柔軟性こそが最大の長所では。
Javaのような厳格な頑固おやじとは、ま逆。

  • hanepjiv: Python / 不便が便利

    Pythonにはメンバアクセスを保護する機能はありません。publicとか、privateとかです。 保護したいと思ってもできない『不便』な仕様です。
    ...
    高速にプロトタイプを組み上げるラピッドタイピング段階では、 Pythonのメンバアクセス制限のように保護機能を全く考慮しない言語の方が気楽に扱えます。

イントロスペクション(introspection)ということば

introspectionとは内省。

では、内省とは

内省とは自己をかえりみる事。


ちょっと、本題からはなれるが、
リフレクションとイントロスペクションは似ているらしい。
Javaの例であるが

・リフレクションは、実行時にオブジェクトの情報を参照して、それを元にオブジェクトを操作する方法
・イントロスペクションは、実行時にオブジェクトの情報を参照して、その情報にさらに変更を加える方法

インスペクション(inspection)とかインセプション(inception)という言葉もあってまぎらわしい。

インスペクションとは、設計図やコードを組織的にレビューするための手法のことだ。インセプションとは、オブジェクト指向の開発プロセスRUPで行なわれる一番最初のフェーズ、いわゆる「方向づけ」フェーズのことだ。

そう言えば、デバッガーで変数の内容を確認(検査)する時にインスペクトするとかいう言葉を使ったような。

pythonのキーワード一覧を調べる

import keyword

print keyword.kwlist

オブジェクトの型を調べる

組み込み関数type,isinstance,issubclass

ローカルなシンボル,グローバルなシンボルを調べる。

locals関数を使うとのその関数内やクラス,メソッド内でのローカルなシンボルの辞書を取得できる。
globals関数を使うとモジュール内のグローバルな名前の辞書を取得できる。

sysモジュールとosモジュール

sysモジュールやosモジュールで定義されている変数の値を参照する事で、環境に対する情報をいろいろ教えてくれる。

dis モジュール

Pythonのバイトコードを調べる。

inspectモジュール

inspectモジュールには、オブジェクトの情報を取得するための便利な関数が用意されている。

inspectモジュールの関数については、次回以降に述べる事にする。

ページのトップへ戻る