----- Original Message -----
> From: "Seymore4Head" <[email protected]>
> To: [email protected]
> Sent: Friday, 28 November, 2014 4:31:50 AM
> Subject: Re: Can you use self in __str__
>
> On Thu, 27 Nov 2014 21:49:29 -0500, Dave Angel <[email protected]>
> wrote:
>
> class Hand:
> def __init__(self):
> self.hand = []
> # create Hand object
>
> def __str__(self):
> s = 'Hand contains '
> for x in self.hand:
> s = s + str(x) + " "
> return s
>
> I am using 2.7 (Codeskulptor). This is working code. It starts with
> an empty list that gets appended from a full deck of shuffled cards.
> dealer=Hand()
> player=Hand()
> I don't really know how to post working code without posting a lot.
> I
> am not being too successful in trying to post enough code to have it
> work without posting the entire code.
> Here is the link if you want to run it.
> http://www.codeskulptor.org/#user38_Kka7mh2v9u_9.py
> The print out looks like this:
> Hand contains H4 DQ.
>
> I can (and am) currently printing the hand like this:
> print "Player's",player
> print "Dealer's",dealer
>
> My question is can you add (self) in the __str__ so when you issue
> the
> command "print player" the "player" part is included in the __str__.
> --
> https://mail.python.org/mailman/listinfo/python-list
I think your main problem is a design issue.
I won't go into details, it would be too long but here's a way to fix your
problem:
# Untested code
class Player(object):
def __init__(self, name):
self.name = name
self.hand = Hand()
def __str__(self):
return '%s<%s> has %s' % (self.__class__.__name__, self.name, self.hand)
# A dealer is a special type of player
class Dealer(Player): pass
def deal():
global outcome, in_play,deck,dealer,player
# your code goes here
deck=Deck()
deck.shuffle()
print deck
players = [Dealer('Robert'), Player('John')]
for deal in range(2):
for player in players:
player.hand.add_card(deck.deal_card())
for player in players:
print str(player)
in_play = True
With the above design, the relation between player and its hand is implemented
with the Player attribute "hand".
It's a classic design where the container knows about the content, but the
content does not know its container.
There are other solutions which do not require a new class, but I have the
feeling you will need the Player class in the future.
Moreover The design above I gave you will be probably broken in the future when
you add features to your code.
The same player may be a dealer or not, it may vary over time. You will
probably need a 'Table' object which handles a collection of players, with a
dealer, small blind, big blind etc, amount of money in the pot etc...
JM
-- IMPORTANT NOTICE:
The contents of this email and any attachments are confidential and may also be
privileged. If you are not the intended recipient, please notify the sender
immediately and do not disclose the contents to any other person, use it for
any purpose, or store or copy the information in any medium. Thank you.
--
https://mail.python.org/mailman/listinfo/python-list