我们都说python中一切皆对象,这其中也包含函数,既然函数是对象,那么就说明对象也能实现函数一样的效果了。python类中有个函数__call__()方法就能实现这样的功能,下面我们来演示一下。
先来看看__call__()方法的实现和用法。
class Dog(object):
name = '小狗'
def __call__(self, age):
print('%s被调用了,年龄是%d' % (self.name, age))
d = Dog()
d(111) # 把d对象当做函数来使用
返回结果:
小狗被调用了,年龄是111
通过返回结果我们可以看出来,对象d就想函数一样被我们使用,同时还能传入参数。
函数当中还有很多高级函数,我们就拿偏函数来再举个例子,深入的看看__call__()方法的使用。
# 与偏函数对比讲解
class Dog(object):
def __init__(self, name):
self.name = name
def __call__(self, color):
print('%s是一直小狗,颜色是%s' % (self.name, color))
d = Dog('Tom') # 创建对象的时候先把初始化参数传入,
d('黑色') # 通过call函数传入另一个参数,实现偏函数效果
d('黄色') # 这里使用对象加上小括号调用的时候会自动调用call方法,__call__和对象之间建立联系的地方