Python类方法的嵌套函数中定义self参数是否有意义?
问题1:innerExample的self是否是普通参数?
是的,这就是完全普通的参数,没有任何特殊含义。
- Python只会对直接定义在类作用域下的方法自动做实例绑定,调用时自动传入实例作为第一个self参数。嵌套在方法内部的普通函数不参与这个绑定逻辑,不管第一个参数叫不叫self,都需要手动传值,本质就是普通的位置参数。
- 你给出的示例代码实际运行会直接抛出
TypeError: innerExample() missing 1 required positional argument: 's',因为你调用innerExample(s)的时候只传了1个参数,这个值会被分配给innerExample的第一个形参self,第二个形参s就收不到值了。
问题2:这种写法有没有实际意义?
完全没有实用价值,属于多余的错误写法。
如果你需要在内部函数中使用当前类实例,直接捕获外层outerExample已经绑定好的self变量就行,完全不需要把self定义为innerExample的参数,正确写法参考:
class Example: def outerExample(self, s): def innerExample(s): # 直接使用外层作用域的self即可,不需要额外传参 print(f"hello {s}, 当前实例为{self}") innerExample(s) a = Example() a.outerExample("world")
如果硬要给innerExample加self参数,调用时必须手动把外层的self传进去:innerExample(self, s),但这种写法完全冗余,没有任何收益,还容易混淆逻辑,不推荐使用。
内容的提问来源于stack exchange,提问作者gr6okn
相关产品推荐
相关产品推荐

