“类型”真的是一个功能吗?

时间:2014-03-22 08:44:58

标签: python function object python-3.x types

首先,我很抱歉,如果我问一些愚蠢的话,因为我是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函数具有不同的类型?或者说文档是撒谎,它不是真正的功能?

3 个答案:

答案 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)

  1. 请注意,在Python anything is object 中。对象可以是callable,即作为函数工作。
  2. typebuilt-in function,即您可以将其称为函数的类型对象。您可以使用一个参数调用它来获取对象的类型。但还有另一个用例。
  3. type是一个 metaclass ,这意味着它本身就是一个类型,可以创建类(也是对象)。
  4. 所有类(以及元类)都是可调用的,这是type功能的另一个原因。您可以使用三个参数调用它来创建一个类。
  5. type是基本的内置元类。所以它是Python中的基础。由于type位于类型层次结构的顶部,type(type)会返回type,即type是其自身的类型。
  6. 您也可能想知道:

答案 2 :(得分:0)

type是一个处理类对象的类。使用对象调用它只是一种使用它的方法。您还可以使用它来创建元类。

例如

>>> MyMetaClass = type("MyMetaClass", (object,), {'foo': 'bar'})
>>> newmeta = MyMetaClass()
>>> newmeta.foo
'bar'
>>> type(MyMetaClass)
<type 'type'>
>>> type(newmeta)
<class '__main__.MyMetaClass'>