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()