Here is a __str__ method for Deck:
#inside class Deck: def __str__(self): res =  for card in self.cards: res.append(str(card)) return '\n'.join(res)
This method demonstrates an efficient way to accumulate a large string: building a list of strings and then using join. The built-in function str invokes the __str__ method on each card and returns the string representation.
Since we invoke join on a newline character, the cards are separated by newlines. Here’s what the result looks like:
>>> deck = Deck()>>> print deckAce of Clubs2 of Clubs3 of Clubs...10 of SpadesJack of SpadesQueen of SpadesKing of Spades
Even though the result appears on 52 lines, it is one long string that contains newlines.