什么是`function`和`module`的类型

时间:2017-06-29 21:37:46

标签: python python-3.x

>>> type(OptimizedRectangle) 
    <class 'type'>    
>>> type(OptimizedRectangle.get_area)
<class 'function'>

因此,类的方法是类function的实例。

>>> type(function)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'function' is not defined

由于function是一个类而一个类是一个对象,function的类型是什么,即它的实例是什么?

正如评论所示

>>> type(type(OptimizedRectangle.get_area))
<class 'type'>

那为什么type(function)不起作用? function是一个类,其中一个类的方法是一个实例吗?

同样,为什么type(module)不起作用?

>>> type(builtins)
<class 'module'>
>>> type(module)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'module' is not defined

2 个答案:

答案 0 :(得分:3)

内置模块types存储整个语言中使用的所有不同类型。它还包含与实例方法对应的FunctionType

>>> class Foo:
...     def bar(self):
...         pass
>>> type(Foo.bar) is types.FunctionType
True

在解释器中调用type(Foo.bar)时输出为<class 'function'>但是这并不一定意味着该类的名称为'function',但它只是类#39} ; s表示(__repr__):

>>> type(types.FunctionType).__repr__(type(Foo.bar))
"<class 'function'>"

正如评论types.FunctionType中所指出的那样,只有对在实现级别定义的函数类型的引用。

FunctionType的类型再次为type,即FunctionTypetype的一个实例(所有类都是如此)。

还要注意特殊性

>>> type(type) is type
True

这意味着类型是它自己的类(即type.__class__指向它自己)。这是在实施层面实现的。

答案 1 :(得分:0)

函数是Python中最简单的可调用对象。 read more here