インスタンスの元となるオブジェクトを返すtypesモジュール

http://d.hatena.ne.jp/leetmikeal/20140214/1392375216

前回の記事で、変数の型をisinstance関数を使用してチェックできると書きました。

このスクリプトを実行します。

#!/usr/bin/python
# -*- coding:utf-8 -*-

def func_inst():
    return "func inst"

if __name__ == '__main__':
    print type(func_inst)
    print isinstance(func_inst, function)

結果

<type 'function'>
Traceback (most recent call last):
  File "failed.py", line 9, in <module>
    print isinstance(func_inst, function)
NameError: name 'function' is not defined

あれ?エラーになりました。func_instは"function"のインスタンスではないようです。関数オブジェクトはtype関数で拾ってきた文字列では識別できません。

色々調べてみると、こういうモジュールが見つかりました。
http://docs.python.jp/2.7/library/types.html

これを使うと、

#!/usr/bin/python
# -*- coding:utf-8 -*-

import types

def func_inst():
    return "func inst"

if __name__ == '__main__':
    print type(func_inst)
    print isinstance(func_inst, types.FunctionType)
<type 'function'>
True