理解这种行为有点难:
def a():
pass
type(a)
>> function
type
的{{1}}为a
,function
的{{1}}是什么?
type
为什么来自function
的{{1}}的{{1}}为type(function)
>> NameError: name 'function' is not defined
?
type
上一条:如果type
是a
,为什么我不能这样做:
type
谢谢!
答案 0 :(得分:5)
任何函数的类型都是<type 'function'>
。与<type 'type'>
一样,函数类型的类型为type(type(a))
。 type(function)
不起作用的原因是因为type(function)
正在尝试获取名为function
的未声明变量的类型,而不是实际函数的类型(即function
是不是关键词)。
您在课程定义中收到元类错误,因为a
的类型为function
而您can't subclass functions in Python。
很多好消息in the docs。
答案 1 :(得分:3)
function
的类型是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
作为子类。