call

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

>>> f = abs
>>> f.__name__
'abs'
>>> f(-123)
123
由于 f 可以被调用,所以,f 被称为可调用对象。所有的函数都是可调用对象。一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。我们把 Person 类变成一个可调用对象:class Person(object):def __init__(self, name, gender):self.name = nameself.gender = genderdef __call__(self, friend):print 'My name is %s...' % self.nameprint '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):passdef __call__(self,num):a,b = 0,1;self.l=[]for i in range (num):self.l.append(a)a,b= b,a+breturn self.ldef __str__(self):return str(self.l)__rept__=__str__f = Fib()
print f(10)

__call__ 的用法相关推荐

  1. python __call__一般用在哪些地方_Python __call__内置函数的作用和用法

    开学了进入了实验室,需要协助大师兄做事,主要是OpenStack中的代码解析,但是涉及很多python高级用法,一时间有点麻烦,在做项目的同时慢慢更新博客.这次先写一下__call__的用法,因为经常 ...

  2. python基础教程:__call__用法

    __call__可以使得方法变成可被调用对象:(PS:python中的方法和普通函数有点区别:方法的第一个参数是类实例) 允许一个类的实例像函数一样被调用.实质上说,这意味着 x() 与 x.call ...

  3. 在 python中每个模块用什么来实现_Python代码模块热更新机制实现(reload)

    对一个游戏来说,无论是client或server都非常需要一套代码热更新的机制.它能大大提高开发效率,又能超乎玩家期望地在运营期在线修正bug和增添功能.可谓必备机制. 热更新机制的目标是: (1)更 ...

  4. @wraps 修饰器:让你的 Python 代码更加简短可爱 | 从简单实例来认识它

    @wraps 修饰器:让你的 Python 代码更加简短可爱 | 从简单实例来认识它 我们在上一篇文章(Python实例来认识并发与并行)中用到了 @timer ,在函数定义时,加上一个小小的 @ti ...

  5. PyTorch深度学习-跟着小土堆学习

    目录 学习视频链接 一些问题 P4:Python/PyTorch学习中两大法宝函数-dir().help() P5:PyCharm及Jupyter使用及对比 P6:PyTorch加载数据初认识 P7: ...

  6. 6/27到7/3日学习计划

    学习目标: 本周计划 学习使用pytorch 学习faster-rcnn,yolo等一系列的检测算法 python的进阶 6/27日计划 看视频至P16 整理总结transform 整理总结hook ...

  7. python中raw是什么意思_对于Python中RawString的理解

    对于Python中RawString的理解 发布于 2016-01-11 06:56:27 | 100 次阅读 | 评论: 0 | 来源: PHPERZ Python编程语言Python 是一种面向对 ...

  8. python知识点学习——类

    参考资料:1.Python:函数和类_江南好-CSDN博客_python 类和函数 2.self参数 - __ init__ ()方法 super(Net, self).__init__()是什么_热 ...

  9. 深入理解Python元类(原创)

    同样效果的代码: def __init__(cls,cls_name,cls_bases,cls_dict):type.__init__(cls,cls_name,cls_bases,cls_dict ...

最新文章

  1. winform中的webbrowser里面操作html代码问题
  2. 【js】小数点后保留两位小数
  3. django模型sqlserver_让Django模型在MSSQL上工作的麻烦?
  4. 文件复制软件绿化之dos命令
  5. gradle 2.1构建android出现错误的解决方案
  6. 测试Java EE 8规范
  7. pause容器作用_Kubernetes学习之pause容器
  8. Redis:21---客户端相关配置篇
  9. Cache工作原理,Cache一致性,你想知道的都在这里
  10. django Form 效验
  11. 字符打印流(PrintWriter)
  12. GeForce Experience显示帧数
  13. php判断手机浏览器,php判断是不是手机浏览器访问
  14. 五分钟轻松搞定产品需求文档!这可能史上最全PRD文档模板
  15. 虚幻5会对行业产生什么重大变化影响?
  16. InoReader——网页无法打开
  17. 不吹不黑,网络安全工程师年薪30万是真的吗?
  18. Linux进程间通信方式
  19. Jenkins2 流水线核心语法
  20. 网络安全实验之《ARP欺骗攻击》实验报告

热门文章

  1. JDBC jar下载
  2. Redis 一主一从
  3. 【MATLAB】最速下降方法
  4. python学习笔记(13)数据结构
  5. 怎么把动图放到word里_word文档如何插入动图?
  6. 上传文件,压缩临时图片,不做本地图片存储,用于传输
  7. WDK与DDK的区别
  8. Latex Zotero导出格式化Bibtex条目
  9. KUDU表的增删改查
  10. ShardingSphere-JDBC使用笔记