在另一个类中声明和更改类实例

问题描述

Stackoverflow大家好!

我有问题。我正在尝试更改一个实例变量(它本身是一个类实例),由于某种原因,它为原始类的所有实例都更改了相同的实例变量。

代码如下:

#create State class
class State(object):

    awake = False

#Set Person Class
class Person(object):

    state = State()
    
#create person instences
jack = Person()
jill = Person()


print(jack.state.awake)
print(jill.state.awake)

#wake jill only
jill.state.awake = True

print("")
print(jack.state.awake)
print(jill.state.awake)

输出

False
False

True
True

我只想唤醒吉尔。

解决方法

要使awakestate作为实例变量,它们必须绑定到self实例,而不是在类级别。否则,类变量是静态的,换句话说,在该类的所有实例之间共享状态。

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

class Person:
    def __init__(self):
        self.state = State()

然后按照您的描述进行操作

>>> jack = Person()
>>> jill = Person()
>>> jack.state.awake
False
>>> jill.state.awake
False
>>> jill.state.awake = True
>>> jack.state.awake
False
>>> jill.state.awake
True
,
#create State class
class State(object):
    def __init__(self):
        self.awake = False

#Set Person Class
class Person(object):
    def __init__(self):
        self.state = State()
    
#create person instences
jack = Person()
jill = Person()


print(jack.state.awake)
print(jill.state.awake)

#wake jill only
jill.state.awake = True

print("")
print(jack.state.awake)
print(jill.state.awake)