对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 相关文章推荐
Windows下PyMongo下载及安装教程
Apr 27 Python
在Python中使用mechanize模块模拟浏览器功能
May 05 Python
python机器学习理论与实战(四)逻辑回归
Jan 19 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
python实现txt文件格式转换为arff格式
May 31 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
Python办公自动化PPT批量转换操作
Sep 15 Python
Python内置的数据类型及使用方法
Apr 13 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
mayfish 数据入库验证代码
2010/04/30 PHP
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
Prototype ObjectRange对象学习
2009/07/19 Javascript
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
2017/03/23 jQuery
JavaScript字符串检索字符的方法
2017/06/23 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
详解Python3中的 input() 函数
2020/03/18 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
毕业生自荐材料范文
2014/12/30 职场文书
岳庙导游词
2015/02/04 职场文书
医德医风自我评价2015
2015/03/03 职场文书
活动总结书怎么写
2015/05/11 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
爱国之歌(8首)
2019/09/29 职场文书
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript