python3中类的__call__()方法介绍

目录

  • [1 代码](#1 代码)
  • [2 解析](#2 解析)
    • [2.1 __call__解析](#2.1 __call__解析)
    • [2.2 *atuple和**bdict解析](#2.2 *atuple和**bdict解析)

1 代码

py 复制代码
import os
import time
import sys

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __call__(self, *atuple, **bdict):
        print(f"len(atuple) = {len(atuple)}!")
        for x in atuple:
            print(f"x = {x}!")
        print(f"len(bdict) = {len(bdict)}!")
        for k, v in bdict.items():
            print(f"k = {k}, v = {v}!")
        return

if __name__ == "__main__":
    print("start")
    print("end")
    stu = Student("John", 20)
    stu(1, 2, 3, apple=4, banana=5, cherry=6, orange=7)

结果为,

txt 复制代码
start
end
len(atuple) = 3!
x = 1!
x = 2!
x = 3!
len(bdict) = 4!
k = apple, v = 4!
k = banana, v = 4!
k = cherry, v = 5!
k = orange, v = 6!

2 解析

2.1 __call__解析

方法 前面是什么 发生的事
ClassName() 类(class) 实例化:创建新对象,执行 init (以及 new)
instance() 实例(object) 调用:把实例当函数用,执行 instance.call(...)

类( ... ) → 实例化(造对象)。

对象( ... ) → 调用(执行该对象的 __call__)。

2.2 *atuple和**bdict解析

写法 含义 函数内类型
*atuple 多余位置参数 tuple
**bdict 多余关键字参数 dict

这样写__call__(self, *atuple, **bdict)表示:实例被调用时,不管传多少位置参数、多少关键字参数,都能接住并在函数里用 atuple 和 bdict 处理。

  • 一个 *:表示「接收多余的位置参数」,打包成元组。
  • 两个 **:表示「接收多余的关键字参数」,打包成字典。
相关推荐
宿州派大星2 小时前
Python实战:PyQt5 + OpenCV + Dlib 打造AI桌面应用
人工智能·python·qt
承渊政道3 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(开源大模型ChatGLM高级定制化应用实战)
人工智能·pytorch·python·llm·模型微调·glm
Joy T5 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
专注仿真8 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes9 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停9 小时前
自动化测试(java)
java·开发语言·selenium·自动化
Smoothcloud润云10 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
databook10 小时前
从循环到向量化:NumPy提速的7个关键思维
python·数据分析·numpy
棉猴10 小时前
玩游戏学Python1-Python和pgzero库的安装
python·pygame·玩游戏·pgzero·pgzrun
诺伦11 小时前
GEO优化数据实证:78%引用流向官网的机制拆解与小品牌三步管线实战教程 | RiseClaw玄策
python·seo·geo·内容营销·ai搜索