Il Changelog per Python 2.2 (in cui sono state introdotte classi di nuovo stile) dice quanto segue sulla funzione __new__
:Perché non __new__ in Python le classi new-style sono un metodo di classe?
__new__
è un metodo statico, non è un metodo di classe. Inizialmente pensavo che avrebbe dovuto essere un metodo di classe, ed è per questo che ho aggiunto la primitivaclassmethod
. Sfortunatamente, con i metodi di classe, gli upcalls non funzionano proprio in questo caso, quindi ho dovuto renderlo un metodo statico con una classe esplicita come primo argomento.
Tuttavia, non posso pensare a metodi di classe perché non avrebbe funzionato per questo scopo, ed è certamente un aspetto migliore. Perché lo __new__
non è finito come metodo di classe alla fine? A cosa si riferisce Guido quando afferma che "in tal caso" i ritardi non funzionano in questo caso "?
@Duncan: Ho volutamente usato 'new' piuttosto che' __new__'. Se non è chiaro, lascia un commento che cercherò di elaborare. – jfs
Penso che se tu avessi usato un nome che era un po 'più distinto rispetto a far cadere i caratteri di sottolineatura, sarebbe stato più chiaro, ma ora capisco grazie. – Duncan
Quando sarebbe effettivamente un problema, però? Se vuoi un'istanza di 'subcls', perché non dovresti chiamare' subcls.new() '? Farlo nel modo in cui descrivi ha l'effetto di non eseguire le funzioni '__new__' corrette su' subcls'. – Dolda2000