在上一篇有关python继承的文章中,大家可以看到在python中类的初始化是使用__init__进行的。实际上在python的世界里面,还有个和__init__方法非常类似的自执行的__call__方法。那么,这个__call__方法和__init__方法有什么异同呢?请参考本文中的内容。

苏南大叔:python代码,对比__init__方法,如何理解__call__方法? - python的call方法
python代码,对比__init__方法,如何理解__call__方法?(图3-1)

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文重点描述,__call____init__的异同点。测试环境:win10python@3.6.8

苏南大叔以前写过一篇__init__.py文件作用的文章,可以点击下面的链接查看:

__call__函数使用方式:

__call__存在于函数function中,如果把函数想象成类的话,那么__call__就是被自动执行的函数。

def hora(str="hora"):
    print("苏南大叔说:"+str+"~")
hora()
hora.__call__("hi")

苏南大叔:python代码,对比__init__方法,如何理解__call__方法? - 函数call
python代码,对比__init__方法,如何理解__call__方法?(图3-2)

__call__在对象中的使用方式:

__call__存在于对象class中,

class greeting:
    def __init__(self, str):
        print("init")
        self.str = str
    def __call__(self, name):
        print("call", name + ":"+self.str)
greeting("hi")
greeting("hello").__call__("苏南")
greeting("hora")("苏南大叔")

苏南大叔:python代码,对比__init__方法,如何理解__call__方法? - 类call
python代码,对比__init__方法,如何理解__call__方法?(图3-3)

类中的__init__对比__call__。从上述代码中,可以看到:

  • __init__是初始化的时候,自动调用的。
  • __init__()__call__()()
  • __call__可以显式调用。
  • __call__是把一个python类作为python函数的时候自动调用的。

相关文章

综述

通过一个__call__方法,就可以把一个类的实例,变成一个函数。更多python的使用经验,请点击下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。