Python 正在覆盖的类的多个实例

Python 正在覆盖的类的多个实例,python,oop,Python,Oop,这里我的问题是setField函数覆盖了Player类的两个实例,我不知道为什么。我看到了类似问题的其他答案,但我没有看到我做错了什么。这是因为您引用的是类属性而不是实例属性。从您发布的代码来看,您似乎有一些Java背景,您可以在类的主体中指定一些变量,然后在各种构造函数中引用它们 但Python中的情况有所不同。在类的作用域中声明的任何内容都将在类的实例之间共享(特别是当它是一个类似列表的可变数据结构时) 如果希望对象只属于实例,则需要将它们指定给\uuuu init\uuuu中的“self”

这里我的问题是
setField
函数覆盖了Player类的两个实例,我不知道为什么。我看到了类似问题的其他答案,但我没有看到我做错了什么。

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

但Python中的情况有所不同。在类的作用域中声明的任何内容都将在类的实例之间共享(特别是当它是一个类似列表的可变数据结构时)

如果希望对象只属于实例,则需要将它们指定给
\uuuu init\uuuu
中的“self”(当然,不需要将它们指定为类属性):


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

但Python中的情况有所不同。在类的作用域中声明的任何内容都将在类的实例之间共享(特别是当它是一个类似列表的可变数据结构时)

如果希望对象只属于实例,则需要将它们指定给
\uuuu init\uuuu
中的“self”(当然,不需要将它们指定为类属性):


代码有很多问题。
cpu1
user1
在其
字段中都具有
f2
属性意味着什么<代码>f2
是列表
[card1,card2]
。两位玩家是否应该使用同一张牌?欢迎使用堆叠溢出!查看和。对于这样的调试帮助,您需要提供一个。我们可以找出问题所在(
cpu1
user1
拥有相同的
字段
),但从这个问题上看不明显。此外,许多代码似乎是不相关的(例如
deck
属性)或重复的(例如
hand
field
属性),这使得作为示例更难理解。另外,在Python中您不需要setter,而且您的setter实际上只是复制器。您可以将
user1.setHand(h)
替换为
user1.hand=h.copy()
。代码中有很多问题。
cpu1
user1
在其
字段中都具有
f2
属性意味着什么<代码>f2
是列表
[card1,card2]
。两位玩家是否应该使用同一张牌?欢迎使用堆叠溢出!查看和。对于这样的调试帮助,您需要提供一个。我们可以找出问题所在(
cpu1
user1
拥有相同的
字段
),但从这个问题上看不明显。此外,许多代码似乎是不相关的(例如
deck
属性)或重复的(例如
hand
field
属性),这使得作为示例更难理解。另外,在Python中您不需要setter,而且您的setter实际上只是复制器。您可以将
user1.setHand(h)
替换为
user1.hand=h.copy()
。这对我帮助很大。我想我仍然有来自java的坏习惯。谢谢这帮了我很多。我想我仍然有来自java的坏习惯。
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)
    def __init__(self, deck):
        self.deck = deck
        self.hand = []
        self.field = []