Can you use self in __str__
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Fri Nov 28 03:25:54 EST 2014
Seymore4Head wrote:
> def __str__(self):
> s = "Hand contains "
> for x in self.hand:
> s = s + str(x) + " "
> return s
>
> This is part of a Hand class. I need a hand for the dealer and a hand
> for the player.
> dealer=Hand()
> player=Hand()
> This prints out 'Hand contains " foo bar
> for both the dealer's hand and the player's hand.
>
> Is there a way to include "self" in the __string__ so it reads
> Dealer hand contains foo bar
> Player hand contains foo bar
Not unless you tell the instance what name you want it to use.
Instances (objects) have no way of knowing the name of the variable you
attach them to. Or even if there is such a variable -- there could be one,
or none, or a thousand.
Consider:
# one variable, one instance
dealer = Hand()
# three variables, one instance
player1 = player2 = player3 = Hand()
# make that four variables
player4 = player2
# no variable, one instance
print Hand()
some_list = [1, 2, 3, Hand(), 5]
If you ask each instance what their name is, how would they know?
The only way is to give them a name when you create them:
class Hand:
def __init__(self, name):
self.name = name
dealer = Hand("dealer")
player1 = Hand("Bert")
player2 = Hand("Ernie")
player3 = Hand("Scarface")
Now the instances know what their name is, since you've told them, and can
use them any way you like:
def __str__(self):
template = "%s's hand contains: "
return (template % self.name) + "King of Spades"
--
Steven
More information about the Python-list
mailing list