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。)