classes - magic methods python
¿Cuál es la diferencia entre los métodos__int__ y__index__ en Python 3? (2)
Consulte PEP 357 : Permitir que se utilice cualquier objeto para cortar.
El método
nb_int
se utiliza para la coacción y, por lo tanto, significa algo fundamentalmente diferente de lo que se solicita aquí. Este PEP propone un método para algo que ya se puede considerar como un número entero que comunica esa información a Python cuando necesita un número entero. El mayor ejemplo de por qué usarnb_int
sería algo malo es que los objetos flotantes ya definen el métodonb_int
, pero los objetos flotantes no deben usarse como índices en una secuencia.
Edit : Parece que fue implementado en Python 2.5.
La sección del Modelo de datos de la documentación de Python 3.2 proporciona las siguientes descripciones para los métodos __int__
e __index__
:
object.__int__(self)
Llamado para implementar la función incorporada [
int()
]. Debe devolver [un entero].
object.__index__(self)
Llamado para implementar
operator.index()
. También se llama cada vez que Python necesita un objeto entero (como en rebanar, o en las funciones incorporadasbin()
,hex()
yoct()
). Debe devolver un entero.
Entiendo que se usan para diferentes propósitos, pero no he podido entender por qué son necesarios dos métodos diferentes. ¿Cuál es la diferencia entre estos métodos? ¿Es seguro solo el alias __index__ = __int__
en mis clases?
Creo que encontrará la respuesta en PEP 357 , que tiene este resumen:
Este PEP propone agregar una ranura nb_index en PyNumberMethods y un método especial __index__ para que se puedan usar objetos arbitrarios siempre que se necesiten números enteros explícitamente en Python, como en la sintaxis de segmento (de donde la ranura obtiene su nombre).