python代码,对比__init__方法,如何理解__call__方法?
发布于 作者:苏南大叔 来源:程序如此灵动~
在上一篇有关python继承的文章中,大家可以看到在python中类的初始化是使用__init__进行的。实际上在python的世界里面,还有个和__init__方法非常类似的自执行的__call__方法。那么,这个__call__方法和__init__方法有什么异同呢?请参考本文中的内容。

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文重点描述,__call__和__init__的异同点。测试环境:win10,python@3.6.8。
苏南大叔以前写过一篇__init__.py文件作用的文章,可以点击下面的链接查看:
__call__函数使用方式:
__call__存在于函数function中,如果把函数想象成类的话,那么__call__就是被自动执行的函数。
def hora(str="hora"):
print("苏南大叔说:"+str+"~")
hora()
hora.__call__("hi")
__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")("苏南大叔")
类中的__init__对比__call__。从上述代码中,可以看到:
__init__是初始化的时候,自动调用的。__init__是(),__call__是()()。__call__可以显式调用。__call__是把一个python类作为python函数的时候自动调用的。
相关文章
- https://newsn.net/say/python-__init__py.html
- https://newsn.net/say/python-set-vs-list.html
- https://newsn.net/say/python-slice-join.html
- https://newsn.net/say/python-json.html
综述
通过一个__call__方法,就可以把一个类的实例,变成一个函数。更多python的使用经验,请点击下面的链接: