我注意到在创建类的成员变量时我很困惑,然后在类方法中设置它们的值。基本上,在我的程序中,每当我在这个函数中更改两个成员变量时,它们都会像它们应该的那样改变。但是,当我创建该类的任何其他实例而不调用更改这些成员变量的方法时,只有一个保持不变。
class Game(object):
isGoing=True
board=[1,2,3]
def __init__(self,name):
self.name=name
def test(self):
self.board[0]="X"
self.isGoing=False
t1=Game("Testing")
t1.test()
print t1.isGoing
print t1.board
t2=Game("Testing")
print t2.isGoing
print t2.board
这将最终打印:
错误
[ 'X',2,3]
真
[ 'X',2,3]
我的问题是,为什么只有isGoing成员变量恢复为True,并且董事会名单保持不变?
答案 0 :(得分:1)
这是因为您已将board
分配给班级Game
,而不是通过班级的__init__
方法分配了个别实例,从而导致Game
分享的每个实例相同的Game.board
属性。为了确保每个实例都有自己独立的值__init__
需要使用:
def __init__(self, name):
self.name = name
self.board = [1, 2, 3]
如果您希望board
成为具有潜在默认值的可分配参数,如果您写了类似
def __init__(self, name, board=[1, 2, 3]):
self.name = name
self.board = board
事实上,你的问题和那里概述的问题非常相似 - 这是由于Python是基于赋值的语言,并且如果为给定变量分配了相同的可变值并且调用其变异方法的事实,分配该值的所有变量都将看到更改生效。