对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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
Python文件操作类操作实例详解
Jul 11 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
python 实现selenium断言和验证的方法
Feb 13 Python
python实现接口并发测试脚本
Jun 25 Python
详解Python3 pandas.merge用法
Sep 05 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
Python基础之高级变量类型实例详解
Jan 03 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 Python
python在协程中增加任务实例操作
Feb 28 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
PHP实现货币换算的方法
2014/11/29 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
jQuery的slideToggle方法实例
2013/05/07 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
详解Document.Cookie
2015/12/25 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
react基本安装与测试示例
2020/04/27 Javascript
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
python实现批量图片格式转换
2020/06/16 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
项目经理的岗位职责
2013/11/23 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
励志演讲稿800字
2014/08/21 职场文书
1000字打架检讨书
2014/11/03 职场文书
未中标通知书
2015/04/17 职场文书
创业计划书之水果店
2019/07/18 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang