__call__拦截调用

当实例调用时,使用__call__方法。不,这不是循环定义:如果定义了,Python就会为实例应用函数调用表达式运行__call__方法。这样可以让类实例的外观和用法类似于函数。

#!/usr/bin/env python
# -*- coding:utf-8 -*- class Prod:
def __init__(self, value):
self.value = value
def __call__(self, other):
return self.value * other x = Prod(2)
print(x(3))
print(x(4))

运行结果:

6
8

在这个例子中,__call__似乎没什么特别的意义。下面这个简单的方法也能提供类似功能。

#!/usr/bin/env python
# -*- coding:utf-8 -*- class Prod:
def __init__(self, value):
self.value = value
def comp(self, other):
return self.value * other x = Prod(3)
print(x.comp(3))
print(x.comp(4))

运行结果:

9
12

然而,当需要为函数的API偏写接口时,__call__就变得很有用:这可以编写遵循所需要的函数来调用接口对象,同时又能保留状态信息。事实上,这可能是除了__init__构造方法以及_str__和__repr_显示格式方法外,第三个最常用的运算符重载方法了。

最新文章

  1. Java NIO概述
  2. Sql Server系列:嵌套查询
  3. sql视图实例
  4. HPUX 大文件系统扩容
  5. 清空file input框
  6. ACM-进阶之路
  7. Ruby自学笔记(六)— 循环
  8. 使用 Oracle Sql plus的一点经验
  9. STL之stack
  10. 关闭chrome浏览器的developer tools
  11. webpack2使用ch5-多页面设置 内部js和引入js
  12. Linux定时器 timerfd使用
  13. C#与Oracle数据库
  14. MAC使用超级终端
  15. CDRAF之Service mesh
  16. #1479 : 三等分(树形DP)
  17. SecureCRT操作指令
  18. jRazor
  19. 性能测试二:jmeter参数化+聚合报告
  20. day10--协成\异步IO\缓存

热门文章

  1. 我的NopCommerce之旅(2): 系统环境及技术分析
  2. org.apache.axis2.AxisFault: Service class XXXXX must have public as access Modifier解决方案
  3. Json字符串转excel表格文件
  4. PHP小数处理常用函数
  5. X11/Xlib.h: No such file or directory
  6. 数学题 追及相遇—HDOJ1275 人傻需要多做题
  7. Asp.Net Core 进阶(一) —— 读取appsettings.json
  8. 常用的 Excel 函数
  9. tomcat假死现象 - 二
  10. shell脚本,锁机制