首先,我很抱歉,如果我问一些愚蠢的话,因为我是Python新手...... 我正在阅读http://docs.python.org/3.1/reference/datamodel.html#objects-values-and-types,并看到了这句话:
type()函数返回一个对象的类型(它本身就是一个对象)
当然,我决定检查一下:
>>> def someFunction(x):
... return x * x
...
>>> type(someFunction)
<class 'function'>
>>> type(type)
<class 'type'>
因此,看起来函数具有function
类型,但是如果它是函数,为什么type
函数具有不同的类型?或者说文档是撒谎,它不是真正的功能?
答案 0 :(得分:10)
是的,type
是一个函数,但它是用C实现的。
还是它自己的类型,否则你无法做到:
>>> def foo(): pass
...
>>> type(foo)
<type 'function'>
>>> type(type)
<type 'type'>
>>> isinstance(type(foo), type)
True
e.g。如果type
的类型不是type
而是function
,则无法测试类型是否为类型。我还在吗?
从技术上讲,type
是可调用的,并且有两个相关的角色可以玩。它是一个元类(一个类工厂),是Python中所有类型的基础,和在调用它时会产生一个type
实例(<type 'function'>
是{{type
的一个实例。 1}}类型)。
这同样适用于所有类型(包括类);调用它们并生成给定类型的新实例。
答案 1 :(得分:2)
type
是built-in function,即您可以将其称为函数的类型对象。您可以使用一个参数调用它来获取对象的类型。但还有另一个用例。type
是一个 metaclass ,这意味着它本身就是一个类型,可以创建类(也是对象)。type
功能的另一个原因。您可以使用三个参数调用它来创建一个类。type
是基本的内置元类。所以它是Python中的基础。由于type
位于类型层次结构的顶部,type(type)
会返回type
,即type
是其自身的类型。您也可能想知道:
答案 2 :(得分:0)
type
是一个处理类对象的类。使用对象调用它只是一种使用它的方法。您还可以使用它来创建元类。
例如
>>> MyMetaClass = type("MyMetaClass", (object,), {'foo': 'bar'})
>>> newmeta = MyMetaClass()
>>> newmeta.foo
'bar'
>>> type(MyMetaClass)
<type 'type'>
>>> type(newmeta)
<class '__main__.MyMetaClass'>