14.1 可调用对象
Python有4种可调用对象:函数、方法、类以及一些类的实例。记住这些对象的任何引用或者别名都是可调用的。
14.1.1 函数
内建函数(BIF)使用C/C++写的,编译过后放入Python解释器,然后把它们作为第一(内建)名称空间的一部分加载进系统。这些函数在_builtin_模块里,并作为_builtins_模块导入到解释器中。
用户定义的函数(UDF)通常是用Python写的,定义在模块的最高级,因此会作为全局名称空间的一部分(一旦创建好内建名称空间)装载到系统中。
从内部机制看,用户定义的函数是“函数”类型的。
>>> def myfunc():
... pass
...
>>> type(myfunc)
<type 'function'>
>>>
通过lambda来创建函数的对象除了没有命名之外,享有和用户定义函数相同的属性。
14.1.2 方法
内建方法(BIM)只有内建类型(built-in type,BIT)有内建方法(built-in Method,BIM).
用户定义的方法(UDM)包含在类定义之中,只是拥有标准函数的包装,仅有定义他们的类可以使用。UDM与类对象是关联的(非绑定方法),但是只能通过类的实例来调用(绑定方法)。无论UDM是否绑定,所有的UDM都是相同的类型——“实例方法”。
14.1.3 类
我们可以利用类的可调用性来创建实例。“调用”类的结果就是创建了实例,即大家所知道的实例化。程序员可以通过__init__()方法来自定义实例化过程。实例化调用的任何参数都会传入到构造器中。
14.1.4 类的实例
Python给类提供了名为__call__的特别方法,该方法允许程序员创建可调用的对象(实例)。
>>> class Class1(object):
... def __call__(self):
... print "Current is __call__ method"
...
>>> c = Class1()
>>> callable(c)
True
>>> c()
Current is __call__ method
>>>
只有定义类的时候实现了__call__方法,类的实例才能成为可调用的。