class Player:
hand = [None]*10
field = [None]*10
deck = []
def __init__(self, deck):
self.deck = deck
def setHand(self, hand):
for i in range(0, len(hand)):
self.hand[i] = hand[i]
def setField(self, field):
for i in range(0, len(field)):
self.field[i] = field[i]
card1 = Card(1, 0)
card2 = Card(2, 0)
card3 = Card(3, 0)
h = [card1, card2, card3]
f = [card1, card2, card3]
f2 = [card1, card2]
cpu1 = Player(f2)
cpu1.setField(f2)
user1 = Player(h)
user1.setHand(h)
user1.setField(f2)
这是我的问题,setField
函数会覆盖Player类的两个实例,我不知道为什么。我已经看到了类似问题的其他答案,但是我没有看到做错了什么。
答案 0 :(得分:3)
这是因为您引用的是类属性,而不是实例。从发布的代码来看,您似乎具有Java的背景知识,您可以在类的主体中指定一些变量,然后在各种构造函数中引用它们。
尽管在Python中有所不同。无论您在类范围内声明的内容如何,都将在该类的实例之间共享(尤其是如果它是可变的数据结构,例如列表)。
如果您只想让对象属于实例,则需要在__init__
内部将它们分配给“ self”(自然,不需要将它们指定为类属性):
def __init__(self, deck):
self.deck = deck
self.hand = []
self.field = []