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

如何调用其他类的实例方法作为装饰器?报错问题求助

问题原因分析

1. 实例方法作为装饰器的参数不匹配问题

Handlers.timeit是类的实例方法,这类方法的第一个参数必须是类的实例(即self)。当你用@Handlers.timeit装饰add方法时,Python会执行add = Handlers.timeit(add)——这里把add函数当成了timeit的第一个参数self,而原本需要传入的目标函数func参数缺失,因此抛出TypeError: timeit() missing 1 required positional argument: 'func'。

2. 移除self后实例方法的参数丢失问题

如果删掉timeit的self参数,它变成了类中的普通函数,但add是RMath的实例方法,必须接收self参数才能访问实例属性。原代码里的timefunc调用func()时没有传递self,导致add方法找不到必需的self参数,所以抛出TypeError: add() missing 1 required positional argument: 'self'。

3. 装饰器返回值的逻辑错误

另外,原代码中timeit返回的是timefunc()(直接执行包装函数的结果),而非timefunc(函数对象)。这会导致装饰过程中直接执行add方法,而不是返回包装后的方法供后续调用——即使前面的参数问题解决了,add也会在装饰阶段就被执行,而非调用m.add()时才执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:54:23