__call__

  • 触发条件:[对象] + ()就触发__call__的执行

    class Person:
        def __init__(self,name):
            self.name=name
    ​
        def __call__(self, *args, **kwargs):
            print(args)
            print(kwargs)
            print(self.name+"触发了__call__")
    ​
    p1=Person("淘小欣")
    p1()        #触发__call__的执行,里面有什么,就会执行什么
    '''输出内容 
    ()
    {}
    淘小欣触发了__call__
    '''
    ​
    ​
    p1(2,3,4,5,5,name="吉吉")
    '''输出内容
    (2, 3, 4, 5, 5)
    {'name': '吉吉'}
    淘小欣触发了__call__
    '''# 2 一切皆对象
    # Person 类,也是一个对象   Person()----->触发生成Person类的类的__call__,不是触发Person的__call__
    # Person类生成的对象 --->p1()--->触发Person的__call__
    

在python中一切皆对象Person类也是一个对象,Persoon+()触发的是生成Person类的类里的__call__

而Person类生成的对象+()触发的才是Person类的__call__

  • __call__的应用:flask源码中使用了它