Each Answer to this Q is separated by one/two green lines.
The Data Model section of the Python 3.2 documentation provides the following descriptions for the
Called to implement the built-in [function
int()]. Should return [an integer].
Called to implement
operator.index(). Also called whenever Python needs an integer object (such as in slicing, or in the built-in
oct()functions). Must return an integer.
I understand that they’re used for different purposes, but I’ve been unable to figure out why two different methods are necessary. What is the difference between these methods? Is it safe to just alias
__index__ = __int__ in my classes?
See PEP 357: Allowing Any Object to be Used for Slicing.
nb_intmethod is used for coercion and so means something
fundamentally different than what is requested here. This PEP
proposes a method for something that can already be thought of as
an integer communicate that information to Python when it needs an
integer. The biggest example of why using
nb_intwould be a bad
thing is that float objects already define the
float objects should not be used as indexes in a sequence.
Edit: It seems that it was implemented in Python 2.5.
I believe you’ll find the answer in PEP 357, which has this abstract:
This PEP proposes adding an nb_index
slot in PyNumberMethods and an
__index__ special method so that arbitrary objects can be used
whenever integers are explicitly needed in Python, such as in slice
syntax (from which the slot gets its name).