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 -- http://mail.python.org/mailman/listinfo/python-list