243:オブジェクトのクラスを調べる
オブジェクトの所属クラスを得る
オブジェクトの所属するクラスオブジェクトは type 関数で得ることができます。また、その名前はクラスオブジェクトの __name__ 属性にあります。
>>> s = 'abc' >>> type(s) <type 'str'> >>> type(s).__name__ 'str'
あるオブジェクトが、特定のクラスのインスタンスか調べる
組み込み関数 isinstance を用います。オブジェクトがサブクラスのインスタンスの場合でも True となります。
>>> s = 'abc' >>> isinstance(s, str) True >>> isinstance(s, basestring) True >>> isinstance(s, int) False
あるクラスそのもののインスタンスであることを確認するには次のようにします。とはいえ、ここまで固い型チェックは Python らしくないのも事実です。
>>> s = 'abc' >>> type(s) == str True >>> type(s) == basestring False
オブジェクトが関連するクラス・モジュールのリストを得る
inspect モジュールを用います。このモジュールにはオブジェクトからさまざまな情報を取り出すための便利な関数がまとまっています。
>>> import inspect
>>> s = 'abc'
>>> inspect.getclasstree([s.__class__])
[(<type 'basestring'>, (<type 'object'>,)), [(<type 'str'>, (<type 'basestring'>
,))]]
>>> inspect.getmodule(s.__class__)
<module '__builtin__' (built-in)>
>>> inspect.getsourcefile(s.__class__)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python25\Lib\inspect.py", line 383, in getsourcefile
filename = getfile(object)
File "C:\Python25\Lib\inspect.py", line 352, in getfile
raise TypeError('arg is a built-in class')
TypeError: arg is a built-in class
>>>
>>> import StringIO
>>> inspect.getmodule(StringIO.StringIO)
<module 'StringIO' from 'C:\python25\lib\StringIO.pyc'>
>>> inspect.getsourcefile(StringIO.StringIO)
'C:\\python25\\lib\\StringIO.py'