2013-02-08 34 views
0

这里是类:类分布错误

class Player: 
    #variables 
    hand = [] 
    name = 'Test Player' 
    #functions 
    def take(self, card): #allows player to take a card 
     self.hand.append(card) 
    def __str__(self): 
     msg = self.name 
     if len(self.hand) > 0: 
      msg = msg + "\nIn hand:" 
      for card in self.hand: 
       msg = msg + ' ' + card.short_name 
     return msg 

这里是功能:

def deal(players): 
    deck = Deck.generate_deck() 
    if len(players) <= 4: 
     for player in players: 
      for cards in range (0, 7): 
       card = random.choice(deck) 
       player.take(card) 
       deck.remove(card) 
    else: 
     for player in players: 
      for cards in range (0, 5): 
       card = random.choice(deck) 
       player.take(card) 
       deck.remove(card) 
    return deck 

这是问题所在。当我打电话给五名球员发牌时,这就是我得到的。

Player 1 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

Player 2 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

Player 3 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

Player 4 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

Player 5 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

p.s.之后的数字是我的测试代码中的一个小调试事件,并没有任何影响。

+1

可能重复:(http://stackoverflow.com/questions/1132941

__init__方法每个玩家创建一个新的列表/最小惊讶合蟒最易变的默认参数的) – bernie 2013-02-08 20:03:20

回答

3

你的问题是你的hand = []列表是附加到类;它是一个类属性并在实例之间共享。

class Player: 
    def __init__(self): 
     self.hand = [] 
[Python中的“最小惊讶”:易变的默认参数]的