gpt4 book ai didi

python - 一个类的多个实例被覆盖

转载 作者:行者123 更新时间:2023-11-30 21:51:19 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com