Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-Class实例列表属性在附加时更改其他实例列表属性_Python_Python 3.x - Fatal编程技术网

Python-Class实例列表属性在附加时更改其他实例列表属性

Python-Class实例列表属性在附加时更改其他实例列表属性,python,python-3.x,Python,Python 3.x,我是Python新手,所以这可能是一个非常枯燥的问题,尽管我在这个主题上搜索了很多,但没有找到答案 因此,我试图编写一个简单的“纸牌游戏”,并为此定义了一个类“Player”,其中包含列表属性“cards”。我已经确保该属性在“definit”中,因此它特定于类实例,但是当我为玩家a向该列表中追加元素时,它也会为玩家B追加元素。 注意:我的代码还包括一个类“Deck”和“Card”,我在这里没有详细说明以保持轻松) ==>playera.show_cards()和playerb.show_car

我是Python新手,所以这可能是一个非常枯燥的问题,尽管我在这个主题上搜索了很多,但没有找到答案

因此,我试图编写一个简单的“纸牌游戏”,并为此定义了一个类“Player”,其中包含列表属性“cards”。我已经确保该属性在“definit”中,因此它特定于类实例,但是当我为玩家a向该列表中追加元素时,它也会为玩家B追加元素。 注意:我的代码还包括一个类“Deck”和“Card”,我在这里没有详细说明以保持轻松)

==>playera.show_cards()和playerb.show_cards()然后打印相同的结果

如果有人能在这方面帮助我,我将不胜感激!
提前感谢。

错误是因为这一行:
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.