Al aprender sobre el modelo de datos de Python, estoy jugando con la creación de objetos a partir de objetos existentes usando el método __new__
. He aquí algunos ejemplos que crean nuevos objetos de varios tipos:Objetos de Python de objetos existentes 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__)
Sin embargo, los siguientes tres experimentos me dan errores:
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__)
Los errores son (respectivamente):
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
¿Por qué estos tres ejemplos no funcionan? (Nota: para el ejemplo lambda
, parece que tengo que pasar un fragmento de código cuando invoco el método __new__
, pero no sé cómo hacerlo). Estoy usando Python 2.6.
Tenga en cuenta que esta no es necesariamente la forma en que desearía crear nuevos objetos en código real, pero mi propósito no es práctico, más bien, es comprender cómo funcionan los métodos de objetos de bajo nivel.
Y qué exactamente el error dice que será beneficioso para nosotros .. –
Mensajes agregados Rohit Gracias por la sugerencia. – rlandster