Python 向集合添加元素时,会向包含该集合的对象的所有实例添加元素

Python 向集合添加元素时,会向包含该集合的对象的所有实例添加元素,python,Python,嗨 我已经创建了一个对象列表。每个对象包含一个集合。我想更新列表中所有对象的集合内容。我为实现这一点而编写的代码是 class Player: name = "" cardsInHand = set() hasBid = False def __init__(self, name): self.name = name class CardDeck: deck = [] def __init__(self): f

嗨 我已经创建了一个对象列表。每个对象包含一个集合。我想更新列表中所有对象的集合内容。我为实现这一点而编写的代码是

class Player:
    name = ""
    cardsInHand = set()
    hasBid = False
    def __init__(self, name):
        self.name = name 

class CardDeck:
    deck = []

    def __init__(self):
        for i in range(39) :
        if i%10>0 and i%10<9 :
                self.deck.append(i)

    def dealCards(self,player):
        cardIndex = 0
        for tempPlayer in player:
            for j in range(4): # since want to add four elements at a time
                tempPlayer.cardsInHand.add(self.deck.pop(cardIndex))
                cardIndex = cardIndex +1
问题是dealCards方法将元素添加到所有对象集中。不是每个对象集中的4个元素,而是每个对象集中的16个元素?
我是python新手,我做错了什么吗?

您正在创建类属性

class Player:
    def __init__(self, name):
        self.name = name 
        self.cardsInHand = set()
        self.hasBid = False

您已经将
cardsInHand
(以及
name
hasBid
)定义为类变量,而不是实例变量;通过在类主体中定义它们,您将它们定义为所有实例共享的变量。如果您熟悉Java,那么它们本质上类似于静态变量。要使它们成为实例变量,您需要在
\uuuu init\uuuu
方法中声明它们,如下所示:

def __init__(self, name):
  self.name = name
  self.hasBid = False
  self.cardsInHand = set()

这奏效了!!!。我想我需要更多地研究类属性。我认为这和java中类的变量一样,在构造函数中你只需要初始化它们。如果我错了,请纠正我,类属性与全局变量类似吗?如果类是全局的,那么是的。
def __init__(self, name):
  self.name = name
  self.hasBid = False
  self.cardsInHand = set()