对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使用Socket(Https)Post登录百度的实现代码
May 18 Python
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
python生成随机验证码(中文验证码)示例
Apr 03 Python
Python中使用装饰器时需要注意的一些问题
May 11 Python
对于Python装饰器使用的一些建议
Jun 03 Python
Python实现简单过滤文本段的方法
May 24 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
python中scikit-learn机器代码实例
Aug 05 Python
新手入门Python编程的8个实用建议
Jul 12 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
python清空命令行方式
Jan 13 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 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
zend api扩展的php对象的autoload工具
2011/04/18 PHP
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
php实例分享之二维数组排序
2014/05/15 PHP
PHP类型约束用法示例
2016/09/28 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
jquery实用代码片段集合
2010/08/12 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
Python数组条件过滤filter函数使用示例
2014/07/22 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
pandas 空数据处理方法详解
2019/11/02 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
能源工程专业应届生求职信
2014/03/01 职场文书
学校搬迁方案
2014/06/15 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
2014年招生工作总结
2014/11/26 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python