>>> 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
答案 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
,即FunctionType
是type
的一个实例(所有类都是如此)。
还要注意特殊性
>>> type(type) is type
True
这意味着类型是它自己的类(即type.__class__
指向它自己)。这是在实施层面实现的。
答案 1 :(得分:0)
函数是Python中最简单的可调用对象。 read more here