类的特殊方法"__call__"详解
1. __call__
当执行对象名+括号时, 会自动执行类中的"__call__"方法, 怎么用?
class A:
def __init__(self, name):
self.name = name def __call__(self, *args, **kwargs):
print(123) obj = A('WangJianwei')
obj() # 当执行 object() 时,会自动执行类中的"__call__"方法
# 结果: 123
实例(对象)分为可调用和不可调用, 怎么区分呢?
单纯的类, 单纯的对象
class A:
def __init__(self, name):
self.name = name # def __call__(self, *args, **kwargs):
# print(123) obj = A('WangJianwei')
# obj()
print(callable(obj)) # 判断给对象是都可被执行
# 结果: False
拥有__call__方法的类
class A:
def __init__(self, name):
self.name = name def __call__(self, *args, **kwargs):
print(123) obj = A('WangJianwei')
obj()
print(callable(obj)) # 判断给对象是都可被执行
# 结果: True
所以, 当一个类中有"__call__"方法是, 那么这个类产生的对象就是一个可调用对象
实例一
class Cal:
def __call__(self, a, b):
return a * b obj = Cal()
print(obj(10,20)) #直接使用对象调用__call__, 并执行里面的代码块
# 结果:200
实例二
class A:
def __call__(self, *args, **kwargs):
print(args)
# 结果: ('123',) class B:
def __init__(self):
self.obj = A()
self.obj('123')
objB = B()
类的特殊方法"__call__"详解的更多相关文章
- C++ string 类的 find 方法实例详解
1.C++ 中 string 类的 find 方法列表 size_type std::basic_string::find(const basic_string &__str, size_ty ...
- 类的特殊方法"__new__"详解
上代码! class A: def __new__(cls, *args, **kwargs): obj = super().__new__(cls) print("__new__ &quo ...
- 集合类 Contains 方法 深入详解 与接口的实例
.Net 相等性:集合类 Contains 方法 深入详解 http://www.cnblogs.com/ldp615/archive/2009/09/05/1560791.html 1.接口的概念及 ...
- C#虚方法virtual详解
转: http://www.cnblogs.com/jason_yjau/archive/2009/08/25/1553949.html C#虚方法virtual详解 在C++.Java等众多OOP语 ...
- Linux NFS服务器的安装与配置方法(图文详解)
这篇文章主要介绍了Linux NFS服务器的安装与配置方法(图文详解),需要的朋友可以参考下(http://xb.xcjl0834.com) 一.NFS服务简介 NFS 是Network File S ...
- 前端html、CSS快速编写代码插件-Emmet使用方法技巧详解
前端html.CSS快速编写代码插件-Emmet使用方法技巧详解 Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来 ...
- 4.C#虚方法virtual详解
C#虚方法virtual详解 在C++.Java等众多OOP语言里都可以看到virtual的身影,而C#作为一个完全面向对象的语言当然也不例外. 虚拟函数从C#的程序编译的角度来看,它和其它一般的函数 ...
- 虚方法virtual详解
虚方法virtual详解 从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在 ...
- C#操作SQLite方法实例详解
用 C# 访问 SQLite 入门(1) CC++C#SQLiteFirefox 用 C# 访问 SQLite 入门 (1) SQLite 在 VS C# 环境下的开发,网上已经有很多教程.我也是从 ...
随机推荐
- android 官网访问不了
网上搜到的解决方案,亲测有用.记下来,以备遗忘. 使用管理员权限,修改C:\Windows\System32\Drivers\etc\hosts文件,加入以下内容 173.194.127.7 deve ...
- 给主程序签名及第三方dll强签名
给主程序添加签名 添加完成后会自动生成一个*.pfx文件. 给程序添加强签名方法: 本文以Quartz.dll为例,使用vs Tools下的工具命令. 打开命令工具是这个样子, ...
- get post put delete
get:获取资源 幂等 post:执行不安全和非幂等操作(幂等:多次请求于一次请求的效果一样) put:更新资源 幂等 delete:删除资源 幂等 如何理解幂等: public book { p ...
- 画布canvas签名
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- [COM Interop学习小结]实现一个C#调用C++的示例
最近在研究产品的架构代码,发现其中涉及到Com组件技术,即项目中的C# Project会通过Com接口来调用C++ Project中的方法,研究一下,实现一个小的例子,供自己学习. 一. 什么是COM ...
- Python基础学习之语句和语法
语句和语法 python语句中有一些基本规则和特殊字符: 井号键“#”表示之后的字符为python注释: 三引号(‘‘‘ ’’’)可以多行注释 换行“\n”是标准的行分隔符(通常一个语句一行): 反斜 ...
- jquery对checkbox的操作汇总
1.全选 $("#btn1").click(function(){ $("input[name='checkbox']").attr("checked ...
- 思科双出口+策略路由+NAT
使用策略路由,从教育网出去的,在教育网接口进行nat转换 访问教育网资源平时走教育网,故障走电信 访问internat走电信线路,故障走教育网 服务器静态绑定教育网ip,不管电信.联通.教育网都走教育 ...
- ui.datepicker的回显问题
应用场景: 页面上有一些现有的输入框,需要调用日期插件,同时还要clone一份,动态添加到页面中,动态生成的输入框在调用datepicker的时候,click事件有效,但是选择的时间无法回显到对应的输 ...
- 如何将windows日志转成syslog格式并发到远程sysylog服务器
安装Snare, 随便找了个版本下载下来,安装一路next,除了中间让你输入一次http的管理登录口令. 2,配置 之后打开URL:http://192.168.37.23:6161/,输入默 ...