2017-06-29 9 views
0

クラスtypeと特定のタイプの関係は何ですか?クラス "タイプ"と特定のタイプの関係は何ですか?

私は、特定のタイプはtypeのサブクラスあったと思ったが、:

>>> type 
<class 'type'> 
>>> import builtins 
>>> builtins.issubclass(type, object) 
True 
>>> builtins.issubclass(int, type) 
False 

感謝。

+0

いいえ、 'type'はクラスの** type **です。 –

+2

[この質問](https://stackoverflow.com/questions/100003/what-is-a-metmetlass-in-python)には、そのトピックに関する優れた回答がいくつかあります。 –

+0

このマントラを忘れないでください:* Pythonの*すべて*はオブジェクトです。つまり、クラスは別のオブジェクトであり、独自の*クラス(メタクラス - クラスのクラス)を持ちます。 –

答えて

4

私は、特定の種類は彼らではないタイプ

のサブクラスと思っていました。すべてのクラスはインスタンスtypeです。 typeは、クラスのクラスとして機能します。 isinstance(class, type)Trueを返し、issubclassは正しくFalseを返します。

issubclassTrueを返す場合は、実際にtypeから継承したカスタムのメタクラス(クラスのクラス)が使用されます。例えば、EnumMetaを取る:

>>> from enum import EnumMeta 
>>> issubclass(EnumMeta, type) 

EnumMetaは、ベースクラス(それから継承)としてtypeを持っているので、これはTrueです:

>>> EnumMeta.__bases__ 
(type,) 

あなたがアップし、そのソースを見た場合、あなたはそれは次のように定義されています参照してくださいねclass EnumMeta(type): ...。すべてのための


issubclass(type, object)戻りTrue Pythonで一つ一つがオブジェクトであるためには(つまり、すべてがobjectから継承します)。

+0

いわゆる「メタクラス」。 –

+0

ありがとうございます。 'type'はどんなクラスですか? – Tim

+0

@Tim 'type'はそれ自身のインスタンスです:-)(' isinstance(type、type) '参照)。これは混乱し、1つのコメントで十分ではないことを説明します。これらの関係を説明する[この素敵な記事](http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html)をご覧ください。 –

関連する問題