我是Python的新手,所以这可能是一个非常沉闷的问题,虽然我已经搜索了很多关于这个主题并找不到答案。
所以我正在尝试编写一个简单的#34;卡片游戏",并为此定义了一个类"播放器",包含列表属性"卡"。我确保此属性位于" def init "因此它特定于类实例,但是当我将一个元素附加到播放器A的此列表时,它也会将其附加到播放器B. 注意:我的代码还包括一个类" Deck"和"卡"我没有在这里明确表示保持清醒)
class Player(object): #defines Player class, including its score and name
all_players=[]
def __init__(self,score,name,cards=[]):
self.score=score
self.name=name
self.cards=cards
Player.all_players.append(name)
playera=Player(0,'John')
playerb=Player(0,'Bill')
playera.cards.append(Deck.hidden_cards[0])
==> playera.show_cards()和playerb.show_cards()然后打印相同的结果
如果有人可以帮助我,我将不胜感激! 提前谢谢。
答案 0 :(得分:1)
错误是由于这一行:def __init__(self,score,name,cards=[]):
- 因为cards=[]
。
对于方法中的可变类型(如空列表),它是在不同实例之间共享的相同列表。使用None初始化并在__init__
内为其分配一个空列表。
class Player(object):
all_players = []
def __init__(self, score, name, cards=None):
if cards is None:
self.cards = []
...etc.
修改:有关default parameters
。