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__"详解的更多相关文章

  1. C++ string 类的 find 方法实例详解

    1.C++ 中 string 类的 find 方法列表 size_type std::basic_string::find(const basic_string &__str, size_ty ...

  2. 类的特殊方法"__new__"详解

    上代码! class A: def __new__(cls, *args, **kwargs): obj = super().__new__(cls) print("__new__ &quo ...

  3. 集合类 Contains 方法 深入详解 与接口的实例

    .Net 相等性:集合类 Contains 方法 深入详解 http://www.cnblogs.com/ldp615/archive/2009/09/05/1560791.html 1.接口的概念及 ...

  4. C#虚方法virtual详解

    转: http://www.cnblogs.com/jason_yjau/archive/2009/08/25/1553949.html C#虚方法virtual详解 在C++.Java等众多OOP语 ...

  5. Linux NFS服务器的安装与配置方法(图文详解)

    这篇文章主要介绍了Linux NFS服务器的安装与配置方法(图文详解),需要的朋友可以参考下(http://xb.xcjl0834.com) 一.NFS服务简介 NFS 是Network File S ...

  6. 前端html、CSS快速编写代码插件-Emmet使用方法技巧详解

    前端html.CSS快速编写代码插件-Emmet使用方法技巧详解   Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来 ...

  7. 4.C#虚方法virtual详解

    C#虚方法virtual详解 在C++.Java等众多OOP语言里都可以看到virtual的身影,而C#作为一个完全面向对象的语言当然也不例外. 虚拟函数从C#的程序编译的角度来看,它和其它一般的函数 ...

  8. 虚方法virtual详解

    虚方法virtual详解   从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在 ...

  9. C#操作SQLite方法实例详解

    用 C# 访问 SQLite 入门(1) CC++C#SQLiteFirefox  用 C# 访问 SQLite 入门 (1) SQLite 在 VS C# 环境下的开发,网上已经有很多教程.我也是从 ...

随机推荐

  1. android 官网访问不了

    网上搜到的解决方案,亲测有用.记下来,以备遗忘. 使用管理员权限,修改C:\Windows\System32\Drivers\etc\hosts文件,加入以下内容 173.194.127.7 deve ...

  2. 给主程序签名及第三方dll强签名

    给主程序添加签名   添加完成后会自动生成一个*.pfx文件.     给程序添加强签名方法:   本文以Quartz.dll为例,使用vs Tools下的工具命令.   打开命令工具是这个样子,   ...

  3. get post put delete

    get:获取资源 幂等 post:执行不安全和非幂等操作(幂等:多次请求于一次请求的效果一样) put:更新资源  幂等 delete:删除资源  幂等 如何理解幂等: public book { p ...

  4. 画布canvas签名

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. [COM Interop学习小结]实现一个C#调用C++的示例

    最近在研究产品的架构代码,发现其中涉及到Com组件技术,即项目中的C# Project会通过Com接口来调用C++ Project中的方法,研究一下,实现一个小的例子,供自己学习. 一. 什么是COM ...

  6. Python基础学习之语句和语法

    语句和语法 python语句中有一些基本规则和特殊字符: 井号键“#”表示之后的字符为python注释: 三引号(‘‘‘ ’’’)可以多行注释 换行“\n”是标准的行分隔符(通常一个语句一行): 反斜 ...

  7. jquery对checkbox的操作汇总

    1.全选 $("#btn1").click(function(){ $("input[name='checkbox']").attr("checked ...

  8. 思科双出口+策略路由+NAT

    使用策略路由,从教育网出去的,在教育网接口进行nat转换 访问教育网资源平时走教育网,故障走电信 访问internat走电信线路,故障走教育网 服务器静态绑定教育网ip,不管电信.联通.教育网都走教育 ...

  9. ui.datepicker的回显问题

    应用场景: 页面上有一些现有的输入框,需要调用日期插件,同时还要clone一份,动态添加到页面中,动态生成的输入框在调用datepicker的时候,click事件有效,但是选择的时间无法回显到对应的输 ...

  10. 如何将windows日志转成syslog格式并发到远程sysylog服务器

      安装Snare, 随便找了个版本下载下来,安装一路next,除了中间让你输入一次http的管理登录口令.   2,配置 之后打开URL:http://192.168.37.23:6161/,输入默 ...