Can print() be reloaded for a user defined class?
Peng Yu
pengyu.ut at gmail.com
Sun Sep 20 08:04:30 EDT 2009
On Sun, Sep 20, 2009 at 4:42 AM, Dave Angel <davea at ieee.org> wrote:
>
>
> 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:
Is __repr__ = __str__ copy by reference or by value? If I change
__str__ later on, will __repr__ be changed automatically?
Regards,
Peng
> 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