一个类的多个实例被覆盖

时间:2020-02-08 20:51:30

标签: python oop

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类的两个实例,我不知道为什么。我已经看到了类似问题的其他答案,但是我没有看到做错了什么。

1 个答案:

答案 0 :(得分:3)

这是因为您引用的是类属性,而不是实例。从发布的代码来看,您似乎具有Java的背景知识,您可以在类的主体中指定一些变量,然后在各种构造函数中引用它们。

尽管在Python中有所不同。无论您在类范围内声明的内容如何,​​都将在该类的实例之间共享(尤其是如果它是可变的数据结构,例如列表)。

如果您只想让对象属于实例,则需要在__init__内部将它们分配给“ self”(自然,不需要将它们指定为类属性):

    def __init__(self, deck):
        self.deck = deck
        self.hand = []
        self.field = []