Python中__call__的用法


问题引出

  一般情况下类方法的调用是通过先创建类对象再通过a.b()的方式来调用,但是如果类中只有一个方法或者一个方法的使用频率非常高,那么就可以为这个方法命名为__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)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM