Python类的__call__方法
在Python中,函数其实是一个对象,我们可以将一个函数赋值给一个变量,而不改变函数的功能。
f = abs
f
abs
f.name
‘abs’f(-123)
123
把内建函数abs()赋值给变量f之后,可以看到f就和abs一样,都是。
由于 f 可以被调用,所以,f 被称为可调用对象,而事实上,所有的函数都是可调用对象。
如果把一个类实例也变成一个可调用对象,可以实现一个特殊的方法__call__()。
例如,我们把Person类变成一个可调用对象:
class Person(object):
def init(self, name, gender):
self.name = name
self.gender = gender
def __call__(self, friend):
print('My name is {}...'.format(self.name))
print('My friend is {}...'.format(friend))
接着我们初始化一个Person对象,并对这个对象通过函数的方式调用:
p = Person(‘Bob’, ‘Male’)
p(‘Alice’) # ==> 用函数的方式调用Person类的实例p
My name is Bob…
My friend is Alice…