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 类的两个实例,我不知道为什么。我看过类似问题的其他答案,但我还没有看到我做错了什么。
最佳答案
这是因为您引用的是类属性而不是实例属性。从您发布的代码来看,您似乎有一些 Java 背景,您可以在类的主体中指定一些变量,然后在各种构造函数中引用它们。
但在 Python 中情况有所不同。无论您在类的范围内声明什么,都将在该类的实例之间共享(特别是如果它是可变数据结构 - 例如列表)。
如果您希望拥有仅属于实例的对象,则需要将它们分配给 __init__
内的“self”(当然,不需要将它们指定为类属性):
def __init__(self, deck):
self.deck = deck
self.hand = []
self.field = []
关于python - 一个类的多个实例被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60131074/