2.x では、クラス オブジェクトはtype
(新しいスタイルのクラス) またはclassobj
(従来のクラス) にすることができます。タイプはtype
組み込みですが、classobj
タイプはそうではありません。それで、どうやってそれを手に入れますか?そのためのtypes
モジュールです。
isinstance(MyClass, (types.TypeType, types.ClassType))
3.x では、従来のクラスについて心配する必要がないため、次のようになります。
isinstance(MyClass, type)
タイプを直接比較したい場合でも、オブジェクトを.xml で比較しないstr
でください。比較:
>>> class MyClassicClass:
... pass
>>> str(type(MyClassicClass)) == "<type 'classobj'>"
True
>>> str("<type 'classobj'>") == "<type 'classobj'>"
True
ほとんどの場合、オブジェクトを直接比較できます。
>>> type(MyClassicClass) == types.ClassType
True
>>> "<type 'classobj'>" == types.ClassType
False
(そして、何らかの理由で文字列表現を実際に比較する必要がある非常にまれなケースでは、repr
ではなく が必要ですstr
。)