On Sun, 07 Oct 2012 10:33:36 +0200, Franck Ditter wrote:
> Question : I may consider + as an hidden instance method , as 1+2 is > equivalent to (1).__add__(2) ? I also consider __abs__ as an instance > method : >>>> (-2).__abs__() > 2 The short answer is, yes. The *correct* answer is, not quite. So-called "dunder" methods (Double leading and trailing UNDERscore) methods like __add__, __abs__, __len__ and many others are treated slightly differently from ordinary instance methods, but only when they are automatically invoked by Python. If you explicitly call `instance.__add__(value)`, __add__ is treated as an ordinary instance method. But when you call `instance + value`, Python automatically invokes the __add__ method, but using slightly different method resolution rules. This is done for the sake of speed. > Question 1 : could the parser cope with the mandatory space in 1 > .__add__(2) ? Why not try it and see? py> 1 .__add__(2) 3 > Question 2 : After importing math, why can't I consider log as an > instance method, after all ? >>>> (4).__log__() > AttributeError: 'float' object has no attribute '__log__' Because importing a module does not magically add new methods to classes. Floats do not have a __log__ method, because they don't need one. Importing math doesn't create such a method. Why would it? What is the purpose of __log__? math.log doesn't need it. -- Steven -- http://mail.python.org/mailman/listinfo/python-list