la lista de cambios para Python 2.2 (donde se introdujeron las clases de nuevo estilo) dice lo siguiente acerca de la función __new__
:¿Por qué __new__ en las clases de estilo nuevo de Python no es un método de clase?
__new__
es un método estático, no es un método de clase. Inicialmente pensé que tendría que ser un método de clase, y es por eso que agregué la primitivaclassmethod
. Desafortunadamente, con los métodos de clase, las llamadas ascendentes no funcionan bien en este caso, así que tuve que convertirlo en un método estático con una clase explícita como primer argumento.
Sin embargo, no puedo pensar por qué los métodos de clase no funcionarían para este propósito, y sin duda se verían mejor. ¿Por qué __new__
no terminó como un método de clase al final? ¿A qué se refiere Guido cuando dice que "las llamadas hacia arriba no funcionan bien en este caso"?
@Duncan: he utilizado intencionadamente 'new' en lugar de' __new__'. Si no está claro, deje un comentario que trataré de explicar. – jfs
Creo que si hubieras usado un nombre que fuera un poco más distinto que solo descartar los guiones bajos, habría sido más claro, pero ahora entiendo, gracias. – Duncan
¿Cuándo sería esto realmente un problema? Si desea una instancia de 'subcls', ¿por qué no debería llamar a' subcls.new() '? Hacerlo de la manera que describes solo tiene el efecto de no ejecutar las funciones '__new__' apropiadas en' subcls'. – Dolda2000