对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 相关文章推荐
Python用list或dict字段模式读取文件的方法
Jan 10 Python
Python元组拆包和具名元组解析实例详解
Mar 26 Python
wxPython实现窗口用图片做背景
Apr 25 Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
python实现可逆简单的加密算法
Mar 22 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
Django用户身份验证完成示例代码
Apr 03 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
php构造函数实例讲解
2013/11/13 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
jQuery之按钮组件的深入解析
2013/06/19 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
Python中zip函数如何使用
2020/06/04 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
python爬取招聘要求等信息实例
2020/11/20 Python
Pandas的数据过滤实现
2021/01/15 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
JPA的特点
2014/10/25 面试题
项目总经理岗位职责
2014/02/14 职场文书
《落花生》教学反思
2014/02/25 职场文书
企业法人授权委托书
2014/04/03 职场文书
初中生评语大全
2014/04/24 职场文书
小学捐书活动总结
2014/07/05 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
2014年租房协议书范本
2014/10/30 职场文书
优秀员工事迹材料
2014/12/20 职场文书
南京大屠杀观后感
2015/06/02 职场文书