News for hackers. Stuff that matters.
Re:A Guide to Python's Magic Methods (2012) by int_19h on Thursday August 09, 2018 @05:32PM (#17728687)
In Python, though, operator overloading is not merely "supported". It's how all operators are defined, including built-in ones.

   >>> dir(123)
   ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', 
   '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__',
   '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__',
   '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', 
   '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', 
   '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', 
   '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', 
   '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', 
   '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 
   'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

   >>> (1).__add__
   <method-wrapper '__add__' of int object at 0x678C40A0>

   >>> (123).__add__.__doc__
   'Return self+value.'

   >>> (1).__add__(2)
   3
Which is a good thing, because it makes the whole arrangement a lot more consistent that languages in which this sort of thing is just magic associated with a specific primitive type (sometimes it's even inconsistent - e.g. in C#, + for ints and strings is magic, but + for decimal is an overloaded operator). In Python, all that magic is confined to the magic methods. Learn them once, and they work the same everywhere.

There are no comments on this comment yet.