__call__可以使得方法变成可被调用对象;(PS:python中的方法和普通函数有点区别:方法的第一个参数是类实例)

允许一个类的实例像函数一样被调用。实质上说,这意味着 x() 与 x.call() 是相同的。注意__call__参数可变。这意味着你可以定义__call__为其他你想要的函数,无论有多少个参数。

class Entity:
'''调用实体来改变实体的位置'''def _init_(self,size,x,y):self.x,self.y = x,yself.size = size
def _call_(self,x,y):'''改变实体的位置'''self.x, self.y = x,ye = Entity(1,2,3)#创建实例
e(4,5)#实例可以像函数那样执行,并传入x y值,修改对象的x y

实例对象也可以像函数一样作为可调用对象来用,那么,这个特点在什么场景用得上呢?

这个要结合类的特性来说,类可以记录数据(属性),而函数不行(闭包某种意义上也可行),利用这种特性可以实现基于类的装饰器,在类里面记录状态,比如,下面这个例子用于记录函数被调用的次数:

class Counter:def _init_(self,func):self.func = funcself.count = 0def _call_(self,*args,**kwargs):self.count += 1return self.func(*args,**kwargs)@Counter
def foo():pass
for i in range(10):foo()print(foo.count) #10

Python大型免费公开课,适合初学者入门
点击此处加群免费获取学习资料及必备软件。

首先这里的@Counter是装饰器,执行起来顺序是 foo = Counter(foo),实例化,把foo函数传到类Counter里面,并存到对象属性里面,然后返回foo = Counter实例。

这时foo已经是Counter实例,而不是本身foo函数。

PS:__call__这种用法在pytorch中也有所体现,pytorch中自定义的类继承于nn.Module父类,且该子类中对父类的forward方法进行了重载,且父类nn.Module中的__call__中调用了forward方法,所以我们直接用子类的实例作为可调用对象

python基础教程:__call__用法相关推荐

  1. Python基础教程,Python入门教程

    Python 是一门上手简单.功能强大.通用型的脚本编程语言.Python 类库极其丰富,这使得 Python 几乎无所不能,网站开发.软件开发.大数据分析.网络爬虫.机器学习等都不在话下. 这套 P ...

  2. python基础教程视频(全13集)-Python基础视频教程(600集)【传智播客精品教程】...

    Python基础视频教程 初级共600节课 本套视频是传智播客紧抓未来最大趋势--人工智能,应运而生的一套Python入门视频教程,Python是学习人工智能的首选语言,而该视频是专门针对零基础的学员 ...

  3. python基础教程书-7本Python必读的入门书籍

    Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来 ...

  4. python基础教程书籍-Python学习必看书籍_带你高效学习

    坚持就是胜利,祝你成功!!! 都说python是最好的语言. 1.<笨办法学Python 3> 入门强烈推荐 本书是一本Python入门书,适合对计算机了解不多,没有学过编程,但对编程感兴 ...

  5. python基础教程书籍-7本Python必读的入门书籍

    Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来 ...

  6. python基础教程-Python入门教程完整版(懂中文就能学会)

    提取码:sjfo 目录大纲: 本套教程15天 学前环境搭建 1-3 天内容为Linux基础命令 4-13 天内容为Python基础教程 14-15 天内容为 飞机大战项目演练 视频概括: 第一阶段(1 ...

  7. 《Python基础教程》学习笔记——异常

    Python基础教程--异常 异常 异常是什么 让事情沿你指定的轨道出错 raise 语句 自定义的异常类 捕获异常 不用提供参数 多个 except 子句 一箭双雕 捕获对象 一网打尽 万事大吉时 ...

  8. 《Python基础教程(第3版)》笔记:第8章异常

    <Python基础教程(第3版)>笔记:异常 重点 第8章 异常 异常对象未被处理(或捕获)时,程序将终止并显示一条错误信息:traceback 每个异常都是某个类的实例, 如何创建异常 ...

  9. Python基础教程:一次性搞定 Django Form

    最近在项目上用到了 Django 的自带的 Form 表单,遇到了一些坑,今天给大家出的这篇Python基础教程也是做了一个简单的总结,大家可以对号出坑. Form 基础介绍 首先让我们先来了解下 D ...

  10. 莫烦Python[基础教程]

    python基础教程一 安装 定义功能 函数参数 函数默认参数 可变参数 关键字参数 变量形式 模块安装 文件读取 文件读取1 文件读取2 文件读取3 Class类 input输入 元组.列表.字典 ...

最新文章

  1. 冠状病毒如何杀灭最高效?这里有一份几十年的实验汇总
  2. Dubbo3.0|阿里巴巴服务框架三位一体的选择与实践
  3. django 中实现文件下载的3种方式
  4. 湖南计算机专业专科排名2015,湖南最好的公办专科大学有哪些排名揭秘?湖南十大专科学校推荐?...
  5. 大数据与Hadoop
  6. Hybrid Data Fusion (HDF)——数据融合
  7. timus 1260. Nudnik Photographer 动态规划
  8. 46 - 算法 -Leetcode-189-旋转数组-数据结构vector或者reverse函数
  9. 从外行到外包,从手工测试到知名互联大厂测开 我经历了我这个年龄段不该经历的事情...
  10. ISE_FIFO_IP核接口测试(一)
  11. JavaSE集合框架-01-集合框架体系及表数据结构
  12. 广东省东莞市谷歌卫星地图下载
  13. hadoop开发步骤
  14. 【2016年第1期】关于我国农业大数据中心建设的设想
  15. 植物大战僵尸Scratch
  16. 微信公众号菜单html5,微信公众号自定义菜单全攻略
  17. java 引入本地dtd,java解析xml文件读取本地dtd或者忽略dtd
  18. python里面and和or用法
  19. poi word表格系列操作
  20. python 四维数据怎么看性别_四维单子上有男女暗示 我告诉你四维彩超怎么分辨男女...

热门文章

  1. 5 python数据分析基础——批量进行数据分析(一)
  2. 数据字典的作用/用途:是数据流程图的补充!4个主要条目:数据项,数据处理(逻辑功能及其算法),数据存储,数据流条目
  3. 电脑进入BIOS系统的简单方法。
  4. NS3中路由协议分析【AODV代码分析】
  5. git基本命令的理解
  6. STM32F411核心板固件库开发(二) USART配置
  7. tlp导致linux运行缓慢,Ubuntu 18.04安装tlp实现电源管理,解决风扇狂转问题
  8. tlp导致linux运行缓慢,在deepin 20系统中使用tlp但无法自动降频的处理
  9. 335x系列平台-usb的模式切换HOST和OTG
  10. layui自定义验证表单