2 个回答

3

在Python中,function的类型是type,而type是Python里的基础元类。元类可以理解为“类的类”。你也可以把type当成一个函数来使用,它可以告诉你一个对象的类型,不过这其实是历史遗留的用法。

types模块提供了大部分内置类型的直接引用。

>>> import types
>>> def a():
...    pass
>>> isinstance(a, types.FunctionType)
True
>>> type(a) is types.FunctionType

原则上,你甚至可以直接实例化types.FunctionType这个类,动态创建一个函数,虽然我想不出有什么实际情况需要这样做:

>>> import types
>>> a = types.FunctionType(compile('print "Hello World!"', '', 'exec'), {}, 'a')
>>> a
<function a at 0x01FCD630>
>>> a()
Hello World!
>>>

你不能对一个函数进行子类化,这就是你最后一段代码失败的原因,不过其实你也不能对子类types.FunctionType

5

任何函数的类型都是 <type 'function'>。而函数的类型的类型是 <type 'type'>,就像你用 type(type(a)) 得到的那样。之所以 type(function) 不管用,是因为它在试图获取一个叫 function 的未声明变量的类型,而不是一个实际函数的类型(也就是说,function 不是一个关键字)。

你在定义类的时候遇到元类错误,是因为 a 的类型是 function,而在 Python 中 函数是不能被继承的

文档里有很多有用的信息 在这里

撰写回答