__call()__ 的作用

使得类实例对象可以像普通函数那样被调用

实际栗子

from typing import Callable

class PoloBlog:
def __init__(self, name):
self.name = name def __call__(self, *args, **kwargs):
print(self.name)
print(args)
print(kwargs) blog = PoloBlog("小菠萝")
blog(1, 2, 3, age=24, sex="girl") print(isinstance(blog, Callable)) # 输出结果
小菠萝
(1, 2, 3)
{'age': 24, 'sex': 'girl'}
True
  • blog() 就像普通函数一样,可以直接执行
  • blog 实例对象就是一个可调用对象

什么是可调用对象

  • Python 中,可以通过 对象() 执行成功的对象,都称为可调用对象
  • 可调用对象包括自定义的函数、Python 内置函数、上面说的实现了 __call__ 的类实例对象

可以通过 isinstance 来判断是不是可调用对象

from typing Callable

isinstance(对象, Callable)

自定义函数的栗子

def say():
print("小菠萝测试笔记") # 调用自定义函数的两种方式 say() # 常见的方式
say.__call__() # 输出结果
小菠萝测试笔记
小菠萝测试笔记

类实例方法的栗子

class A:
def say(self):
print("小菠萝测试笔记") a = A()
a.say()
a.say.__call__() # 输出结果
小菠萝测试笔记
小菠萝测试笔记

总结

  • 对象() 还是常用的可调用对象的执行方式
  • 对象.__call__() 作为了解补充即可

Python - 面向对象编程 - __call__()的更多相关文章

  1. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  2. 图解python | 面向对象编程

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...

  3. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  4. python 面向对象编程(一)

    一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...

  5. Python面向对象编程指南

    Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...

  6. Python面向对象编程(下)

    本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...

  7. Python 面向对象编程——访问限制

    <无访问限制的对象> 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑.但是,从前面Student类的定义来看(见:Py ...

  8. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

  9. Python 面向对象编程基础

    Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...

随机推荐

  1. XSS靶机1

    参考文章https://blog.csdn.net/weixin_30897079/article/details/97314476 第一关 http://www.zixem.altervista.o ...

  2. String,String Builder,String Buffer-源码

    目录 String 源码分析 常用的API isEmpty() length() charAt() substring() equals() equals()与"==" inter ...

  3. vue中rem的转换

    1 function rems(doc: any, win: any): void { 2 let docEl = doc.documentElement, 3 resizeEvt = 'orient ...

  4. web浏览器知识点

    网页是怎么形成的 前端的代码(英文字母)---->浏览器渲染 ------- >  客户眼中的效果 浏览器(显示代码) 游览器是网页显示,运行的平台,常用的的游览器有IE(Edge).火狐 ...

  5. 用 区间判断(if)来猜价格的高低

    1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 int price = 150; 6 int gue ...

  6. ICCV2021 |重新思考人群中的计数和定位:一个纯粹基于点的框架

    ​ 论文:Rethinking Counting and Localization in Crowds:A Purely Point-Based Framework 代码:https://github ...

  7. zookeeper的集群搭建

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  8. Reuse Sonar Checkstyle Violation Report for Custom Data Analysis

    Write a violation rules file; Import it into Sonar as a Quality Profile named as "MyRules" ...

  9. HTTP缓存——协商缓存(缓存验证)

    协商缓存 所谓"协商",可以理解为:客户端和服务端双方商量着来. 客户端检查资源超过有效期.强缓存命中失败的情况下,则发出请求"询问"服务器是否资源真的过期了, ...

  10. Sqli-Labs less1-4

    首先,记录一下基础知识,可能不全: 几个常用的函数: 1.version()   --Mysql版本 2.user()  --数据库用户名 3.database()  --数据库名 4.@@datad ...