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