Python魔术方法 `__call__` 功能详解与实战案例

关于__call__ 或许这篇就能满足你!!!


一、触发场景

  • 对象函数式调用
    当使用实例对象()语法调用类实例时自动触发
  • 装饰器应用
    实现类装饰器时通过__call__接收被装饰函数
  • 动态行为模拟
    需要对象在不同调用场景下表现不同功能时触发

二、核心功能

功能维度 具体描述
函数化对象 使类实例具备函数调用特性,支持obj(arg1, arg2)语法
状态保持 在多次调用间保留实例属性值,实现有状态的函数对象
参数动态处理 支持接收任意数量位置参数(*args)和关键字参数(**kwargs)
装饰器工厂 通过类封装装饰逻辑,支持带参数的装饰器实现
策略模式实现 根据初始化参数动态改变调用时的处理逻辑

三、方法参数

参数类型 接收方式 典型应用场景
位置参数 *args元组接收 数值计算、数据处理等场景
关键字参数 **kwargs字典接收 配置项传递、日志分级等场景
实例属性 通过self访问初始化时设置的参数 状态保持型调用

四、具体案例解析

1. 状态保持函数对象

场景:创建有状态的计数器,每次调用自动累加

class Counter:
    def __init__(self):
        self.count = 0
    
    def __call__(self):
        self.count += 1
        return self.count

counter = Counter()
print(counter())  # 输出:1
print(counter())  # 输出:2

要点

  • 通过__call__实现无参数调用时的状态更新
  • 实例属性count在多次调用间保留值

2. 装饰器模式实现

场景:创建带参数的重试装饰器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yant224

点滴鼓励,汇成前行星光🌟

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值