问题引出
一般情况下类方法的调用是通过先创建类对象再通过.的方式来调用,但是如果类中只有一个方法或者一个方法的使用频率非常高,那么就可以为这个方法命名为__call__来简化调用。
__call__
存在__call__方法的类对象被称为可调用对象,它的作用可以总结为以下两点:
示例1
创建一个类A,类A中有m、n两个函数,m的使用频率非常高,于是我们就可以用__call__来简化m的调用:
# 使用__call__前 class A(): def m(self): print(‘a‘) def n(self): print(‘b‘) a = A() a.m()
# 使用__call__后 class A(): def __call__(self): print(‘a‘) def n(self): print(‘b‘) a = A() a()
示例2
创建类A和函数B,类A下的m函数与函数B功能类似;现在我们需要将A的对象和B函数作为参数传到函数C中去执行:
# 使用__call__前 class A(): def m(self): print(‘good‘) a = A() def B(): print(‘good‘) def C1(func): func.m() def C2(func): func() C1(a) C2(B)
由于对象和函数调用上的区别我们必须要有两个不同的C函数才能实现相同的功能,而通过__call__我们就可以模糊两者的差别,提高程序的兼容性:
# 使用__call__后 class A(): def __call__(self): print(‘good‘) a = A() def B(): print(‘good‘) def C(func): func() C(a) C(B)
原文:https://www.cnblogs.com/yeer-xuan/p/13497494.html