On 12/05/2011 07:41 AM, Lie Ryan wrote:
On 12/05/2011 10:18 PM, Suresh Sharma wrote:
Pls help its really frustrating
---------- Forwarded message ----------
From: Suresh Sharma
Date: Monday, December 5, 2011
Subject: class print method...
To: "d...@davea.name <mailto:d...@davea.name>" <d...@davea.name
<mailto:d...@davea.name>>
Dave,
Thanx for the quick response, i am sorry that i did not explain
correctly look at the code below inspite of this i am just getting class
object at memory location.I am sort i typed all this code on my android
in a hurry so.indentation could.not.be.managed but this.similar code
when i run all my objects created by class deck are not shown but stored
in varioia meory locations. How can i display them.
I think you're in the right track, however I suspect you're running
the code in the shell instead of as a script. The shell uses
__repr__() to print objects instead of __str__(), so you either need
to use 'print' or you need to call str(), note the following:
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> suits = ['spades', 'clubs', 'diamonds', 'hearts']
>>> ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J',
'Q', 'K']
>>> class Card:
... def __init__(self, rank, suit):
... self.suit = suit
... self.rank = rank
... def __str__(self):
... return suits[self.suit] + ' ' + ranks[self.rank]
...
>>> Card(2, 3) #1
<__main__.Card instance at 0x7f719c3a20e0>
>>> str(Card(2, 3)) #2 of your
'hearts 3'
>>> print Card(2, 3) #3
hearts 3
In #1, the output is the __repr__() of your Card class; you can modify
this output by overriding the __repr__() on your Card class.
In #2, the output is the __repr__() of a string, the string is the
return value from __str__() of your Card class. The repr of a string
is the string enclosed in quotes, which is why there is an extra pair
of quotes.
In #3, you're 'print'-ing a string, the string is the return value
from __str__() of your Card class. There's no extra quotes, since
'print' prints the string itself, not the repr of the string.
Lie is most likely correct. When I saw your message, i saw many bugs,
but didn't know which were caused by your retyping, and which were
actually there. I also saw no mainline. While i was deciding how to
respond, Lie came up with his answer.
Notice that he fixed lots of your bugs, and explains the distinction of
print, as you'd use in your program, and the output of the debugger (or
some IDEs. There are other places where defining a __str__() can be
useful, such as if you print a list. The __str__() method of list calls
the __repr__() for each object inside it. So it can be useful to define
both, even if you decide to have them do the same thing.
Lie didn't include your Deck class, which has more problems. If you
really want print to work on the whole Deck, you're going to have to
build a single string for the whole thing. Currently you just return
the name of the first card. Instead of return inside the loop, you'll
have to construct a string (perhaps by concatenating a new value each
time through), and put the return after the loop.
Notice also that you top-posted, which is the wrong place for your
comments. Please put your comments after whatever part you're quoting
from other messages, as Lie and I both demonstrate.
--
DaveA
--
http://mail.python.org/mailman/listinfo/python-list