首页 > 编程语言 >Python中的__call__()方法

Python中的__call__()方法

时间:2024-01-14 23:23:52浏览次数:44  
标签:__ 调用 name Python self counter call

  在 Python 中,__call__() 是一个特殊方法(magic method),用于使对象变成可调用(callable)。当一个对象实现了 __call__() 方法时,你可以像调用函数一样调用这个对象,就好像它是一个函数一样。

  下面是一个简单的例子,演示了 __call__() 的用法:

class CallableObject:
    def __init__(self, name):
        self.name = name

    def __call__(self, *args, **kwargs):
        print(f"Calling {self.name} with args: {args} and kwargs: {kwargs}")

# 创建一个可调用对象
obj = CallableObject("my_callable")

# 调用对象
obj(1, 2, 3, keyword="value")

  在这个例子中,CallableObject 类实现了 __call__() 方法。当你创建一个 CallableObject 实例 obj 并尝试调用它时,实际上会调用 __call__() 方法。在这个例子中,它会输出一条消息,显示调用时传递的参数。

  常见的应用场景包括创建可带有状态的函数,使对象可以保持状态并在调用时执行某些操作。这对于实现函数装饰器或创建可调用的类实例都是有用的。

class Counter:
    def __init__(self):
        self.count = 0

    def __call__(self):
        self.count += 1
        return self.count

# 创建一个可调用对象
counter = Counter()

# 调用对象
print(counter())  # 输出 1
print(counter())  # 输出 2
print(counter())  # 输出 3

  在这个例子中,Counter 类实现了 __call__() 方法,使得每次调用 counter() 时,计数器的值会递增。




NLP工程化

1.本公众号以对话系统为中心,专注于Python/C++/CUDA、ML/DL/RL和NLP/KG/DS/LLM领域的技术分享。
2.本公众号Roadmap可查看飞书文档:https://z0yrmerhgi8.feishu.cn/wiki/Zpewwe2T2iCQfwkSyMOcgwdInhf

NLP工程化(公众号)

NLP工程化(知识星球)

标签:__,调用,name,Python,self,counter,call
From: https://www.cnblogs.com/shengshengwang/p/17964429

相关文章

  • Java基础
    Java基础一、注释//1、单行注释//我是单行注释//2、多行注释/*我是多行注释*///3、文档注释/***@Description我是文档注释*@Author作者*///4、有趣的注释/****_ooOoo_*o8888888o*88......
  • 【Vue】前端直接显示MySQL Datatime时间,显示为英文如何处理
    问题如图想让时间显示为自己想要的格式,可以自己编写一个函数constformatDate=(timestamp)=>{constdate=newDate(timestamp);constyear=date.getFullYear();constmonth=String(date.getMonth()+1).padStart(2,'0');constday=String(date.getDate......
  • Python中的魔法方法
      Python中有很多魔法方法,它们以双下划线__开头和结尾,用于实现类的特殊行为。以下是一些常用的魔法方法:1.__init__(self,...)  初始化方法,用于创建对象并设置初始状态。2.__str__(self)  返回对象的非正式字符串表示形式,通过str()函数调用。3.__repr__(self)......
  • ch01_投资与量化投资
    一、什么是投资1.1经济意义上的投资投资是为获得一定的预期社会经济效益而进行的资金或资本物的投入及其活动过程。1.2投资的分类实物资产,又称实质资产或有形资产,是以实物形态存在的资产,如汽车、房屋、机器设备、各种原料、材料等,是固定资产与流动资产、生产流通性固定资产......
  • 11.10
    《程序员的修炼之道:从小工到专家》的第三章节主要探讨了“技术深度与广度”的问题。这一章节强调了技术深度和广度对于程序员的重要性,以及如何在这两个方面取得平衡。首先,作者指出技术深度是程序员的核心竞争力。只有深入理解某个领域的技术,才能更好地解决相关问题。因此,程序员需......
  • 11.8
    《代码大全2》是一本非常经典的软件开发书籍。在书中,强调了比较优秀的代码结构和命名规范的重要性。书中注释的部分帮助我理解怎么去编写有意义的注释,合适的注释可以提供代码理解上的便利,但是过多或者无关的注释会干扰代码的可读性。还有书中关于代码复用和模块化的内容帮助学习......
  • 两万字长文世界编程语言大串讲
    layout:posttitle:"两万字长文:编程语言大串讲"tags:-"编程语言"-"大道至简"TL;DR本文收录在《大道至简,给所有人看的编程书》第3章,讲述了编程语言的发展历史,以及各种编程语言的特点。本文是一篇长文,大约两万字,建议在电脑上阅读。公认的世界上“第一位给计算机......
  • 请使用scss写一个util,用于方便创建毛玻璃特效的背景图片,支持文字在图片上显示,不被遮挡
    下面是一个使用SCSS编写的util,用于创建毛玻璃特效的背景图片,并确保文字不被遮挡。该util使用::before伪元素来创建毛玻璃效果,同时在伪元素上添加文字,以确保文字显示在图片上方。@mixinglassBackground($imageUrl,$textColor:#fff,$blurAmount:10px){position:re......
  • 11.15
    语法说明如下:1)过程名存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即db_name.sp_name。需要注意的是,名称应当尽量避免选取与MySQL内置函数相同的名称,否则会发生错误。2)过程参数存储过程的参数列表。其中,<参数名......
  • P10058 Reverse and Rotate题解
    简单题意一共3个操作:rev:将字符串翻转。>\(x\):将后面\(x\)个字母移到前面。<\(x\):将前面\(x\)个字母移到后面。解法解法一看到#1到#3的范围可以打出暴力程序,按题意模拟,时间复杂度\(O(n|S|)\)。预计\(30\)pts。解法二很明显,第二个操作和第三个操作有点像......