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

求助:类中声明的类实例被所有类实例共享的问题

问题原因解析

嘿,我来帮你搞定这个问题!你遇到的其实是Python里类变量和实例变量的常见坑——你把Person类里的state定义成了类变量,导致所有Person实例共享同一个State对象啦!

你看,原代码里Person类中的state = State()是直接写在类体里的,这属于类变量,它绑定在Person类本身,所有通过这个类创建的实例都会共用这同一个State对象。所以当你修改jill.state.awake时,本质上是在修改那个共享的State对象的属性,自然jack.state.awake也会跟着变化。

解决方法

要解决这个问题很简单,我们只需要把state变成每个实例独有的实例变量,也就是把它放到Person类的__init__方法里,用self.state来定义。这样每次创建Person实例时,都会生成一个全新的State对象,各个实例的状态就完全独立了。

修改后的代码如下:

# 创建State类
class State(object):
    awake = False

# 设置Person类
class Person(object):
    def __init__(self):
        # 每个实例初始化时创建专属的State对象
        self.state = State()

# 创建Person实例
jack = Person()
jill = Person()
print(jack.state.awake)
print(jill.state.awake)

# 只唤醒jill
jill.state.awake = True
print("")
print(jack.state.awake)
print(jill.state.awake)
运行结果
False
False

False
True
额外优化提示

另外提一嘴,原State类里的awake也是类变量,虽然这次的问题主要出在Person的state上,但如果后续你想让每个State实例有自己独立的awake状态,最好也把它移到State的__init__方法里,写法更规范,还能避免其他潜在的坑:

class State(object):
    def __init__(self):
        self.awake = False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:37:28