首页 > 编程语言 > 详细

Python中__call__的用法

时间:2020-08-13 17:47:51      阅读:73      评论:0      收藏:0      [点我收藏+]

问题引出

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

 

Python中__call__的用法

原文:https://www.cnblogs.com/yeer-xuan/p/13497494.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!