__call__
在Python中,函数其实是一个对象: >>> f = abs
>>> f.__name__
'abs'
>>> f(-123)
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)

最新文章

  1. Element-ui,Mint-ui
  2. [转载][jQuery] Cannot read property ‘msie’ of undefined错误的解决方法
  3. memcached全面剖析--5
  4. 将requirejs进行到底(2)
  5. hdu How many integers can you find
  6. debug 心得
  7. oracle10g安装图解(win7)
  8. WEB前端面试真题 - 2000!大数的阶乘如何计算?
  9. HDU 5182
  10. zookeeper 应用开发
  11. python 基本数据类型以及运算符操作
  12. 文件上传下下载(不包含断点续传) Excel,Word导入导出基础
  13. 20175312 2018-2019-2 《Java程序设计》第5周学习总结
  14. 【收藏】轻松导出全民K歌里任何人录制的短视频(MV)、歌曲的方法
  15. C#生成DLL,在Unity中导入/调用DLL
  16. Luogu 3385 负环 | 我有特别的SPFA技巧
  17. [转]python与numpy基础
  18. c#图片生成png格式和原图不同
  19. 分析解决 spring quartz 中出现的执行两次问题
  20. 20155336 2016-2017-2《JAVA程序设计》第二周学习总结

热门文章

  1. 伪触发 input file 的click事件
  2. SpringBoot入门笔记(三)、热加载
  3. 九、文件IO——案例构建标准库
  4. qt5下载与安装,VS2017的环境配置
  5. servlet增删改查
  6. 在Github和oschina上搭建自己的博客网站
  7. JDBC、DBCP、C3P0、jdbc-pool--链接方式?连接池?
  8. 2017-2018-2 20165237 实验三《 敏捷开发与XP实践》实验报告
  9. yum upgrade和yum update的区别
  10. Des加密解密算法java实现