A class can implement certain operations that are invoked by special syntax (such as subscription or arithmetic operations) by defining methods with special names. For instance, if a class defines a method named __getitem__, and x is an instance of this class, then x[i] is equivalent to x.__getitem__(i). (The reverse is not true - if x is a list object, x.__getitem__(i) is not equivalent to x[i].)
Except for __repr__, __str__ and __cmp__, attempts to execute an operation raise an exception when no appropriate method is defined. For __repr__ and __cmp__, the traditional interpretations are used in this case. For __str__, the __repr__ method is used.