Nell'apprendere a conoscere il modello di dati di Python, sto giocando con la creazione di oggetti da oggetti esistenti usando il metodo __new__
. Ecco alcuni esempi che creano nuovi oggetti di vario tipo:Oggetti Python da oggetti esistenti usando __new__
x = 2; print type(x).__new__(x.__class__)
x = {}; print type(x).__new__(x.__class__)
x = [1,2]; print type(x).__new__(x.__class__)
x = 2.34; print type(x).__new__(x.__class__)
x = '13'; print type(x).__new__(x.__class__)
x = 1.0j; print type(x).__new__(x.__class__)
x = True; print type(x).__new__(x.__class__)
x = (1,2); print type(x).__new__(x.__class__)
Tuttavia, i seguenti tre esperimenti mi danno errori:
x = None; print type(x).__new__(x.__class__)
x = lambda z: z**2; print type(x).__new__(x.__class__)
x = object; print type(x).__new__(x.__class__)
Gli errori sono (rispettivamente):
TypeError: object.__new__(NoneType) is not safe, use NoneType.__new__()
TypeError: Required argument 'code' (pos 1) not found
TypeError: type() takes 1 or 3 arguments
Perché questi tre esempi non funzionano? (Nota: per l'esempio lambda
sembra che devo passare un frammento di codice quando invoco il metodo __new__
ma non so come farlo.) Sto usando Python 2.6.
Si noti che mi rendo conto che questo non è necessariamente il modo in cui si desidera creare nuovi oggetti in codice reale, ma il mio scopo non è pratico, piuttosto, è capire come funzionano i metodi a basso livello degli oggetti.
E quale errore esattamente dice che sarà vantaggioso per noi .. –
Aggiunti messaggi , Rohit. Grazie per il suggerimento. – rlandster