type()是内置函数吗?

时间:2015-12-04 01:48:18

标签: python object types

This site列出了type()作为Python中的内置函数。但是,当我检查时它似乎是'type'类型:

>>> type(dir)
<type 'builtin_function_or_method'>
>>> type(id)
<type 'builtin_function_or_method'>
>>> type(abs)
<type 'builtin_function_or_method'>
>>> type(type)
<type 'type'>

对我而言,似乎type()是一个内置函数,它返回参数的类型。我试图通过以下方式验证这一点:

>>> a = type(type)
>>> type(a)
<type 'type'>
>>> type(1)
<type 'int'>
>>> type(type(1))
<type 'type'>

我在这里缺少什么? type()只是type类的构造函数,所有其他对象都是从该类继承的吗?

1 个答案:

答案 0 :(得分:4)

是。 type()既是类似函数的对象,它返回一个对象的类型,也是一个类,它作为所有类的基本元类(不是基类,但是接近)。它通过传递给它的参数数量来区分它的两个函数。一个参数,它返回该参数的类型。三个参数,它返回一个从这些参数构建的类。

(元类是类的类。就像常规对象是某个类的实例一样,类是元类的实例。)

出于历史原因,这是这样的。最初,它只是一个获得对象类型的函数。在Python 2.2中,当内置类型和用户定义的类统一时,它就成了基类元类。但是,为了向后兼容,旧type()的功能保留为type类的一部分。