reading help() - newbie question

Lie Ryan lie.1296 at gmail.com
Sat Jun 5 18:25:10 EDT 2010


On 06/05/10 21:24, Lie Ryan wrote:
> On 05/31/10 20:19, Payal wrote:
>> Hi,
>> I am trying to learn Python (again) and have some basic doubts which I
>> hope someone in the list can address. (English is not my first language and I
>> have no CS background except I can write decent shell scripts)
>>
>> When I type help(something) e.g. help(list), I see many methods like,
>> __methodname__(). Are these something special? How do I use them and why
>> put "__" around them?
> 
> Yes, the double-underscore are hooks to the various python protocols.
> They defines, among all, operator overloading, class construction and
> initialization, iterator protocol, descriptor protocol, type-casting, etc.
> 
> A typical usage of these double-underscore is to create a class that
> overrides these functions, e.g.:
> 
> class Comparable(object):
>     def __init__(self, value):
>         self.value = value
>     def __lt__(self, other):
>         return self.value > other.value
>     def __gt__(self, other):
>         return self.value < other.value
>     def __str__(self):
>         return "Value: " + self.value
> 
> You should never create your own double-underscore method, just
> override/use the ones that Python provide.

Ok, I just read what I wrote again and I noticed that the example isn't
complete enough to illustrate what I'm talking about, so:

class Comparable(object):
    def __init__(self, value):
        self.value = value
    def __lt__(self, other):
        return self.value > other.value
    def __gt__(self, other):
        return self.value < other.value
    def __str__(self):
        return "Value: " + self.value

a = Comparable(10) # a.value = 10
b = Comparable(20) # b.value = 20

# the < operator calls __lt__ special method and this
# prints False, because a.value > other.value is False
print a < b

# prints "Value: 10" since 'print' statement calls str() builtin
# function which calls __str__ to turn objects into a string
print a



More information about the Python-list mailing list