2017-06-29 87 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)来解释这些关系。 –

相关问题