Can print() be reloaded for a user defined class?
Dave Angel
davea at ieee.org
Sun Sep 20 05:42:35 EDT 2009
Peng Yu wrote:
> <snip>
>> def __str__(self):
>> return 'Bin(%s, %s)' %(self.x, self.y)
>> __repr__ =_str__
>>
>> Please use an initial capital letter when defining a class, this is
>> the accepted way in many languages!!!
>>
>
> I want to understand the exact meaning of the last line ('__repr__ __str__'). Would you please point me to the section of the python
> manual that describes such usage.
>
> Regards,
> Peng
>
>
I don't know where to look in the various manuals, but what we have here
are class attributes. Inside the class definition, each method
definition is a class attribute. In addition, any "variable" definition
is a class attribute as well. For example,
class MyClass(object):
counter = 0
def __str__(self):
return "Kilroy"+str(self.value)
def __init__(self, num):
self.value = num+1
counter is a class attribute, initialized to zero. That attribute is
shared among all the instances, unlike data attributes, which are
independently stored in each instance.
Anyway, the __repr__ = __str__ simply copies a class attribute. So
now you have two names which call the same method. To explicitly call
one of them, you might use:
obj = MyClass(42)
mystring = obj.__str__() #mystring is now "Kilroy43"
But normally, you don't directly call such methods, except for debug
purposes. They are implicitly called by functions like print().
More information about the Python-list
mailing list