首页 > 编程语言 >python里的__call__()方法

python里的__call__()方法

时间:2023-01-10 17:56:45浏览次数:26  
标签:__ python self init 实例 call print

解释__call__ 方法是 Python 中类的特殊方法,当一个类的实例被“调用”时,就会自动触发这个方法。“调用”一个类的实例就是使用小括号 () 操作符。

举个例子:

class Adder:
    def __init__(self, value=0):
        self.data = value

    def __call__(self, x):
        return self.data + x

add = Adder()
print(add(1)) # 1
print(add(2)) # 2

上面这个类 Adder 有一个__call__ 方法,该方法接收一个参数x,并返回data + x 的值。我们可以通过实例来进行调用,就像函数调用一样,如上面代码中的add(1) 和add(2),他会自动调用__call__方法,并返回结果。

使用__call__ 方法可以使一个类的实例具有“函数”的行为。在一些情况下这可以更方便地实现一些功能。

还需要注意的是,与 init 方法一样, __call__方法的名字也是固定的,不能随意更改。

总结

总之,使用 call 方法可以使类的实例具有可调用的特性,使得类的实例可以像函数一样被调用,这能带来很多便利和可能性,增加程序的灵活性和可扩展性。

再附带一个程序,更能看懂

class Test():

    def __init__(self,a,b):
        print("..init...开始了")
        self.a=a
        self.b=b
        print("__init__%s|||%s"%(self.a,self.b))
        print("这是init方法执行完了")
    def __call__(self, a, b):
        print("===")
        self.a=a
        self.b=b
        print("__call__with({},{})".format(self.a,self.b))
        # 此外注意,在python中, 通过%进行字符串格式化会被淘汰,建议改成使用str.format方式进行字符串格式化
#实例化这个类
test=Test(7,8)    #__init__7|||8
#通过_call_()来修改类属性值
test(4,5)   # 将实例x看做了一个函数   #__call__with(4,5)


标签:__,python,self,init,实例,call,print
From: https://www.cnblogs.com/xinxuann/p/17040969.html

相关文章

  • 会话技术
    *会话技术:  1.会话:一次会话中包含多次请求和响应。    *一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到一方断开为止  2.共享数据:在一次会话的范围内的......
  • JavaScript 中URL 查询字符串(query string)的序列与反序列化
    方法一:在JavaScript中,可以使用URLSearchParams对象来处理URL中的查询字符串。序列化(将JavaScript对象转换为查询字符串)可以使用URLSearchParams对象的append(......
  • C/C++ 异常处理机制(例:文件拷贝)
    异常是一种程序控制机制,与函数机制互补。函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它可以在出现“意外”时中断当前函数,并以某种机制......
  • git---本地查看远程仓库地址
    在用VUE开发项目的时候,有时候需要去gitee里面查看仓库的地址,或者是git下来的项目,有时候会忘记远程仓库的地址。查看方法很简单:gitremote-vgitremote-v然后就可以......
  • 前端开源项目 CDN | 网站整理
    官网描述BootCDN附带搜索,编辑好格式可以直接复制百度静态资源公共库百度的,支持搜索,不支持直接复制新浪js库不算很方便七牛云存储开放静态文件国内知......
  • Office - Excel - 数据透视表 Pivot Table
     一、透视表数据源可以通过Excel直接去链接数据库(需要公司本身支持才行)也可以把需要分析的数据,从数据库中直接拷贝出来--这里演示的是这一种: 将结果集,放在一个ta......
  • 状态机模式
    有限状态机  FSM(FiniteStateMachine)状态机四要素现态、条件、动作、次态现态:是指当前所处的状态条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次......
  • 时间复杂度,空间复杂度,常数复杂度
    时间复杂度时间复杂度,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数.时间复杂度常用大写O表述,不包括这个函数的低阶项和首项系数。时间复......
  • 世上最强学习方法——费曼学习法(深度学习)
    世上最强学习方法——费曼学习法(深度学习)费曼学习法的核心要义是通过复述概念并反馈结果来加强记忆。 一、选择目标领域,并完全了解这个概念将需要学习的概念写在纸上,......
  • 事件处理_1事件的基本使用
    事件处理_1事件的基本使用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>事件的基本使用</title><scriptsrc="../js/vue.js"></......