__call__()魔法函数

实现可调用对象

Posted by 周自横 on April 23, 2020

__call__()的作用

这个方法是类中的一个特殊的实例方法。类似在类中重载了()运算符,将对象名()变为了对象名.__call__()

Python中凡是可以将()直接应用到自身并执行的,称为可调用对象,除了定义了该魔法函数的类之外,还有自定的函数,内置函数

class test(object):
    def __init__(self,a):
        self.a = a
        self.b = 0
    def __call__(self):
        self.b = self.a*2
        print(self.b)
t = test(3)  
t()# 6,此处就是t.__call__()

同样作为可调用对象,对方法使用__call__是和正常使用一样的

def print_(a):
    print(a*2)
print_.__call__(3) #6

结论:在类中使用__call__就是将类的实例对象变为可调用对象,实例可通过()方式完成对模板类的__call__ 的调用.非元类的所有类都是type的实例

t = test(3)这一步调用了test的模板类type__call__函数,创建对象完成构造函数,t()调用自己的模板类test__call__函数