You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Python可调用类实现static_args属性?

关于Python可调用类绑定静态参数的实现

首先明确:你提到的static_args并不是Python标准内置的属性,它应该是指给可调用对象预绑定静态参数的设计思路——核心是让可调用类支持链式调用:先接收并保存配置参数,再接收目标函数,最后结合保存的参数执行逻辑,这种思路常见于带参数的装饰器实现中。

实现方案

基于你提供的Test类,我们可以通过修改__call__方法,让它支持两种调用模式,同时用static_args属性存储预绑定的参数:

from typing import Callable

class Test:
    def __init__(self):
        # 初始化存储静态参数的属性
        self.static_args = {}

    def func(self):
        print("Hello there")
        
    def __call__(self, fn: Callable = None, **kwargs):
        # 情况1:传入了目标函数,执行逻辑并使用静态参数
        if fn is not None:
            fn()
            print(f"This is a test class. Static args: {self.static_args}")
            return
        # 情况2:传入的是配置参数,保存后返回自身以支持链式调用
        self.static_args.update(kwargs)
        return self

# 初始化实例
test = Test()

# 模拟你提到的另一个可调用对象g
def g():
    print("Executing callable g")

# 按照需求调用
test(aux=1)(g)

执行效果

运行上述代码后,会输出:

Executing callable g
This is a test class. Static args: {'aux': 1}

逻辑说明

  1. 当调用test(aux=1)时,__call__方法接收到关键字参数,将其存入self.static_args,然后返回test实例本身(因为类实现了__call__,所以实例是可调用的);
  2. 紧接着调用(g)时,__call__方法接收到可调用对象g,先执行g(),再打印包含static_args的提示信息,完成整个流程;
  3. 你可以通过self.static_args随时访问已绑定的静态参数,在类的其他方法中也能使用这些参数。

内容的提问来源于stack exchange,提问作者user3322839

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:23:29