对python特殊函数 __call__()的使用详解


Posted in Python onJuly 02, 2019

__call__

在Python中,函数其实是一个对象:

>>> f = abs
>>> f.__name__
'abs'
>>> f(-123)

由于 f 可以被调用,所以,f 被称为可调用对象。

所有的函数都是可调用对象。

一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

我们把 Person 类变成一个可调用对象:

class Person(object):
  def __init__(self, name, gender):
    self.name = name
    self.gender = gender

  def __call__(self, friend):
    print 'My name is %s...' % self.name
    print 'My friend is %s...' % friend

现在可以对 Person 实例直接调用:

>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...

单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。

任务

改进一下前面定义的斐波那契数列:

class Fib(object):
  ???

请加一个__call__方法,让调用更简单:

>>> f = Fib()
>>> print f(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

可以把实例对象用类似函数的形式表示,进一步模糊了函数和对象之间的概念

class Fib(object):
  def __init__(self):
    pass
  def __call__(self,num):
    a,b = 0,1;
    self.l=[]
    
    for i in range (num):
      self.l.append(a)
      a,b= b,a+b
    return self.l
  def __str__(self):
    return str(self.l)
  __rept__=__str__
      
f = Fib()
print f(10)

以上这篇对python特殊函数 __call__()的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Python的加密模块md5、sha、crypt使用实例
Sep 28 Python
Python中的集合类型知识讲解
Aug 19 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
python复制文件到指定目录的实例
Apr 27 Python
Python3处理HTTP请求的实例
May 10 Python
python 移除字符串尾部的数字方法
Jul 17 Python
Sanic框架应用部署方法详解
Jul 18 Python
QML使用Python的函数过程解析
Sep 26 Python
如何写python的配置文件
Jun 07 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
python使用torch随机初始化参数
Mar 22 Python
对python 调用类属性的方法详解
Jul 02 #Python
python算法题 链表反转详解
Jul 02 #Python
python输入多行字符串的方法总结
Jul 02 #Python
Django高级编程之自定义Field实现多语言
Jul 02 #Python
python 杀死自身进程的实现方法
Jul 01 #Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 #Python
PyCharm-错误-找不到指定文件python.exe的解决方法
Jul 01 #Python
You might like
php 动态执行带有参数的类方法
2009/04/10 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
js 通用订单代码
2013/12/23 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
javascript实现下雨效果
2017/03/27 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
Python实现从URL地址提取文件名的方法
2015/05/15 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
《动手做做看》教学反思
2014/04/09 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
先进个人评语大全
2015/01/04 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
基层工作经历证明
2015/06/19 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android
python数字图像处理实现图像的形变与缩放
2022/06/28 Python