如何为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}
逻辑说明
- 当调用
test(aux=1)时,__call__方法接收到关键字参数,将其存入self.static_args,然后返回test实例本身(因为类实现了__call__,所以实例是可调用的); - 紧接着调用
(g)时,__call__方法接收到可调用对象g,先执行g(),再打印包含static_args的提示信息,完成整个流程; - 你可以通过
self.static_args随时访问已绑定的静态参数,在类的其他方法中也能使用这些参数。
内容的提问来源于stack exchange,提问作者user3322839
相关产品推荐
相关产品推荐

