Constructor problem

Nick mediocre_person at hotmail.com
Thu Oct 28 17:51:12 EDT 2004


I'm writing a simple class to represent a deck of cards. Here is the 
stripped down version. Notice classes Deck and Deck2. Class Deck works, 
Deck2 does not. My thinking is that it should be more efficient (a la 
Deck2) to pre-create the list, and then modify it, rather than appending 
Cards as in Deck.

# --------------------snip--------------
class Card:
     def __init__(self, rank=0, suit=0):
         self.rank=rank
         self.suit=suit

     def __repr__(self):
         r = "A23456789TJQK"[self.rank]
         s = "SHCD"[self.suit]
         return r+s


class Deck:
     def __init__(self):
         self.deck = []
         for r in range(13):
             for s in range(4):
                 self.deck.append(Card(r,s))

class Deck2:
     def __init__(self):
         self.deck = 52 * [Card()]
         n = 0
         for r in range(13):
             for s in range(4):
                 self.deck[n].rank = r
                 self.deck[n].suit = s
                 n = n + 1


a = Deck()
print "A --> ", a.deck
b = Deck2()
print "B --> ", b.deck
# ------------snap---------------------

Deck A looks right, 52 cards, one of each. Deck B, on the other hand, is 
52 of the same card, all rank 12, suit 3.

What am I missing???

Thanks!
Nick.



More information about the Python-list mailing list