A class can implement certain operations that are invoked by special
syntax (such as arithmetic operations or subscripting and slicing) 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 where mentioned, attempts to execute an
operation raise an exception when no appropriate method is defined.