Python-Class实例列表属性在附加时更改其他实例列表属性
我是Python新手,所以这可能是一个非常枯燥的问题,尽管我在这个主题上搜索了很多,但没有找到答案 因此,我试图编写一个简单的“纸牌游戏”,并为此定义了一个类“Player”,其中包含列表属性“cards”。我已经确保该属性在“definit”中,因此它特定于类实例,但是当我为玩家a向该列表中追加元素时,它也会为玩家B追加元素。 注意:我的代码还包括一个类“Deck”和“Card”,我在这里没有详细说明以保持轻松) ==>playera.show_cards()和playerb.show_cards()然后打印相同的结果 如果有人能在这方面帮助我,我将不胜感激!Python-Class实例列表属性在附加时更改其他实例列表属性,python,python-3.x,Python,Python 3.x,我是Python新手,所以这可能是一个非常枯燥的问题,尽管我在这个主题上搜索了很多,但没有找到答案 因此,我试图编写一个简单的“纸牌游戏”,并为此定义了一个类“Player”,其中包含列表属性“cards”。我已经确保该属性在“definit”中,因此它特定于类实例,但是当我为玩家a向该列表中追加元素时,它也会为玩家B追加元素。 注意:我的代码还包括一个类“Deck”和“Card”,我在这里没有详细说明以保持轻松) ==>playera.show_cards()和playerb.show_car
提前感谢。错误是因为这一行:
def\uuuu init\uuuuu(self,score,name,cards=[]):
-因为cards=[]
。
对于方法中的可变类型(如空列表),不同实例之间共享的是相同的列表。使用None初始化,并在\uuuu init\uuuu
中为其分配一个空列表
class Player(object):
all_players = []
def __init__(self, score, name, cards=None):
if cards is None:
self.cards = []
...etc.
编辑:有关如何处理
默认参数
的更好说明,请参见,非常感谢!这个问题与默认参数的处理有关。如果没有使用默认参数,就不会出现以下问题:playera=Player(0,'John',[])
。定义函数时,将计算默认参数。这将导致创建空列表的此默认值,并在每次未提供参数时分配相同的列表。如果在您的示例中,您测试了它们是否是相同的列表,它会说它们是:playera.cards is playerb.cards
返回True
+1是的,我应该更具体地说,这是关于如何处理默认参数的。我找不到确切解释的答案。
class Player(object):
all_players = []
def __init__(self, score, name, cards=None):
if cards is None:
self.cards = []
...etc.