A list of special method and attribute names in Python
Archive - Originally posted on "The Horse's Mouth" - 2010-10-17 12:58:01 - Graham EllisIf I write
a = b + c
in Python, I'm really writing
a = b.__add__(c)
(see source code example [here]
In other words, every variable is an object and every operator is a method. It's just the icing on the cake that makes the language as powerful as it is - with the clever engine usually hidden just below the covers.
However - if you're defining your own objects, you need to define your own operators too, and I have often been asked if I have a complete list of all the special method names and what they do. Well - here's an overview of what they do in Python 2.7 (a few extras get added from time to time); you can find an authoritative description of each in the Python Language Reference Manual - data model chapter
Update - Feb 2011 - I've long been looking for a good description page for all of these magic methods - just come across one on Rafe Kettler's site.
Special Method Names
__new__ True constructor - usually wraps __init__
__init__ Object constructor
__call__
__getattr__ Handling object attributes [example] and [calling example]
__setattr__
__delattr__
__getattribute__
__getitem__ subscripting with [..] [example]
__setitem__
__delitem__
__del__ Destructor / wrapper around del
__repr__ Convert to Python source
__str__ Convert to printable string
__cmp__ Compare two objects
__lt__ Less Than
__gt__ Greater Than
__eq__ Equal to
__ne__ Not Equal to
__le__ Less Than or Equal
__ge__ Greater Than or Equal
__hash__ Calculate an (integer) hash value
__nonzero__ Is it nonzero
__unicode__ Convert to Unicode String
__get__
__set__
__delete__
__instancecheck__ isinstance builtin function
__subclasscheck__
__getslice__ Working with slices .. [..:..][example]
__setslice__
__delslice__
__len__ len building function
__add__ + [example]
__mul__ *
__contains__
__coerce__
__iter__
__reversed__
__sub__ -
__div__ /
__floordiv__ //
__mod__ %
__divmod__
__pow__ ^
__lshift__ <<
__rshift__ >>
__and__ &
__xor__ ~
__or__ |
__truediv__ __future__ > /
__radd__ "r" methods operate on object to right
__rmul__
__rsub__
__rdiv__
__rtruediv__
__rfloordiv__
__rmod__
__rdivmod__
__rpow__
__rlshift__
__rrshift__
__rand__
__rxor__
__ror__
__iadd__ +=
__imul__ *=
__isub__ -=
__idiv__ /=
__itruediv__ __future__ > /=
__ifloordiv__ //=
__imod__ %=
__ipow__ ^=
__ilshift__ <<=
__irshift__ >>=
__iand__ &=
__ixor__
__ior__ |=
__neg__ monadic -
__pos__ monadic +
__abs__ abs built in function
__invert__ monadic ~
__complex__ complex built in function
__int__ int built in function
__long__ long built in function
__float__ float built in function
__oct__ oct built in function
__hex__ hex built in function
__index__
__enter__
__exit__
Special Attribute Names
These are not callable methods - rather they are built in variables. Some are readonly and other may be modified.
__doc__ or func_doc Documentation String
__name__ or func_name Name of method
__module__ Name of module
__self__
__func__
__dict__
__file__
__bases__
__slots__
__weakref__
__metaclass__
func_defaults Defaulted parameters
func_code
func_globals Globals used
func_dict Funtion namespace
func_closure
That's quite an extensive list - and it makes you realise just how much the authors of language wrappers such as numpy have had to do, and why there's so a time lag between a new version of Python being released and upgrades to numpy
We cover the use of a number of these on our Python Programming Course - although not all of them; some are niche and easily understood from the manual ... and once you have worked out __add__ you can probably work out __sub__, __mul__ and __div__ for yourself ;-)