__call__ 的用法
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__ 的用法相关推荐
- python __call__一般用在哪些地方_Python __call__内置函数的作用和用法
开学了进入了实验室,需要协助大师兄做事,主要是OpenStack中的代码解析,但是涉及很多python高级用法,一时间有点麻烦,在做项目的同时慢慢更新博客.这次先写一下__call__的用法,因为经常 ...
- python基础教程:__call__用法
__call__可以使得方法变成可被调用对象:(PS:python中的方法和普通函数有点区别:方法的第一个参数是类实例) 允许一个类的实例像函数一样被调用.实质上说,这意味着 x() 与 x.call ...
- 在 python中每个模块用什么来实现_Python代码模块热更新机制实现(reload)
对一个游戏来说,无论是client或server都非常需要一套代码热更新的机制.它能大大提高开发效率,又能超乎玩家期望地在运营期在线修正bug和增添功能.可谓必备机制. 热更新机制的目标是: (1)更 ...
- @wraps 修饰器:让你的 Python 代码更加简短可爱 | 从简单实例来认识它
@wraps 修饰器:让你的 Python 代码更加简短可爱 | 从简单实例来认识它 我们在上一篇文章(Python实例来认识并发与并行)中用到了 @timer ,在函数定义时,加上一个小小的 @ti ...
- PyTorch深度学习-跟着小土堆学习
目录 学习视频链接 一些问题 P4:Python/PyTorch学习中两大法宝函数-dir().help() P5:PyCharm及Jupyter使用及对比 P6:PyTorch加载数据初认识 P7: ...
- 6/27到7/3日学习计划
学习目标: 本周计划 学习使用pytorch 学习faster-rcnn,yolo等一系列的检测算法 python的进阶 6/27日计划 看视频至P16 整理总结transform 整理总结hook ...
- python中raw是什么意思_对于Python中RawString的理解
对于Python中RawString的理解 发布于 2016-01-11 06:56:27 | 100 次阅读 | 评论: 0 | 来源: PHPERZ Python编程语言Python 是一种面向对 ...
- python知识点学习——类
参考资料:1.Python:函数和类_江南好-CSDN博客_python 类和函数 2.self参数 - __ init__ ()方法 super(Net, self).__init__()是什么_热 ...
- 深入理解Python元类(原创)
同样效果的代码: def __init__(cls,cls_name,cls_bases,cls_dict):type.__init__(cls,cls_name,cls_bases,cls_dict ...
最新文章
- winform中的webbrowser里面操作html代码问题
- 【js】小数点后保留两位小数
- django模型sqlserver_让Django模型在MSSQL上工作的麻烦?
- 文件复制软件绿化之dos命令
- gradle 2.1构建android出现错误的解决方案
- 测试Java EE 8规范
- pause容器作用_Kubernetes学习之pause容器
- Redis:21---客户端相关配置篇
- Cache工作原理,Cache一致性,你想知道的都在这里
- django Form 效验
- 字符打印流(PrintWriter)
- GeForce Experience显示帧数
- php判断手机浏览器,php判断是不是手机浏览器访问
- 五分钟轻松搞定产品需求文档!这可能史上最全PRD文档模板
- 虚幻5会对行业产生什么重大变化影响?
- InoReader——网页无法打开
- 不吹不黑,网络安全工程师年薪30万是真的吗?
- Linux进程间通信方式
- Jenkins2 流水线核心语法
- 网络安全实验之《ARP欺骗攻击》实验报告