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

Python类方法中未用self声明的变量是实例独立的还是静态的?

结论

不同实例调用sum方法时,方法内的result变量完全相互独立,不存在跨实例、跨线程的静态共享,并发执行时不会互相干扰。

作用域规则说明

Python的变量作用域严格按代码块边界划分,在实例方法内部直接定义、未绑定到self的变量属于方法局部变量:

  • 局部变量的生命周期完全绑定单次方法调用:每次调用方法时,Python会为这次调用生成独立的栈帧,局部变量就存储在当前栈帧的专属空间里,方法执行完毕栈帧销毁,局部变量也会被回收。
  • 不管是同一个实例多次调用该方法,还是不同实例并发调用该方法,每次调用生成的局部变量都处于隔离的栈空间中,互不影响。
  • 示例代码里result :int = 0的类型标注不会改变变量的作用域属性,result始终是局部变量。

类相关变量的归属速查

可以按定义位置快速判断变量的共享范围:

  • 类变量(静态共享):直接定义在类体中、所有方法外部的变量,所有类实例共享同一份值
  • 实例变量(实例级独立):定义在方法内部、通过self.xxx形式绑定的变量,归属于单个实例,不同实例的同名字段互不影响
  • 局部变量(调用级独立):定义在方法内部、未绑定self也未声明为类属性的变量,仅在单次方法调用过程中有效,同一个实例的多次调用之间都不共享值,更不会跨实例共享。

多线程场景补充

示例中定义的Calculator类继承自threading.Thread,两个线程实例并发执行sum方法时,每个线程持有独立的调用栈,各自栈内的result变量完全隔离,不会出现值互相覆盖的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:21:34