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

Python中类实例属性是如何传递给装饰器内部函数的?

问题解答

这个传递逻辑本质是Python实例方法的自动传参规则 + 装饰器的方法替换逻辑共同作用的结果,分两点拆解:

1. 装饰器的替换逻辑

你写的@integer_check语法等价于在类定义完成后,执行了以下代码:

NumericalOps.multiply_together = integer_check(NumericalOps.multiply_together)

也就是说,原来类里定义的multiply_together实例方法,被替换成了integer_check返回的inner函数。

2. 实例方法的自动传参规则

Python中调用实例方法时,解释器会自动将调用该方法的实例对象作为第一个参数传入方法,我们平时写实例方法时的第一个参数self就是用来接收这个自动传入的实例的。
当你执行y.multiply_together()时,实际调用的是被替换后的inner函数,解释器还是会遵循这个规则,把实例y作为第一个参数传给inner,这个参数就被inner的第一个形参ref接收了。

所以ref本质就是你创建的NumericalOps类的实例y,自然可以直接访问_val1、_val2这些实例属性。你可以在inner函数内添加一行打印代码print(ref is y),运行后会输出True,足以证明二者是同一个对象。
另外你也能看到inner最后调用原方法时写的是return method(ref),本质就是把实例传给原方法的self参数,和普通实例方法的执行逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:24:03