2017-06-29 115 views
0

type和特定類型之間的關係是什麼?類「類型」和特定類型之間的關係是什麼?

我以爲特定類型的人的type子類,但:

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

感謝。

+0

不,'type'是一個類的**類型**。 –

+2

[這個問題](https://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python)在這個話題上有一些很好的答案。 –

+0

請記住這個咒語:* Python中的所有*是一個對象。這意味着類只是另一個對象,有他們自己的類(一個元類 - 一個類的類)。 –

回答

4

我以爲特定類型爲類型

他們不是的子類。每個班級的實例type; type充當類的類。 isinstance(class, type)返回True,而issubclass正確返回False

issubclass返回True的情況與實際繼承自type的自定義元類(類的類)有關。例如,採取EnumMeta

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

這是True因爲EnumMeta具有type作爲基類(從它繼承):

>>> EnumMeta.__bases__ 
(type,) 

如果你看它的源了,你會看到它的定義爲class EnumMeta(type): ...


issubclass(type, object)回報True的一切,因爲在Python中的每一件事情都是一個對象(指一切從object繼承)。

+0

所謂的「元類」。 –

+0

謝謝。 「type」是什麼類的對象? – Tim

+0

@Tim'type'是它自己的一個實例:-)(參見'isinstance(type,type)')。這確實令人困惑,並且在一個評論中解釋它是不夠的;你可以看看[這篇不錯的文章](http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html)來解釋這些關係。 –

相關問題