Re: [Python-es] Impedir creación de objeto

Chema Cortes pych3m4 en gmail.com
Jue Jun 11 10:15:27 CEST 2009


El 10 de junio de 2009 17:29, Milton Galo Patricio Inostroza
Aguilera<minoztro en gmail.com> escribió:

> ¿Es correcto preguntar si el producto existe en la capa de
> persistencia y dependiendo de esto retornar object.__new__ y si no
> existe retornar un None?

Según dice la documentación:

- cuando __new__(cls,...) devuelve una instancia de 'cls', se invoca
__init__ para inicializar la instancia
- cuando lo que devuelve no es instancia de 'cls' entonces no se
invoca a __init__ y tiene que inicializar la instancia por su cuenta
(Factoría)

Entiendo yo que sí que se puede hacer lo pides de devolver 'None' para
indicar que no se ha creado el objeto. En el ejemplo que pones, Cuando
devuelve None no se ejecutaría el método '__init__'


> Una clase de prueba que hice (simple) que ejemplifica mi pensamiento
> es la siguiente:
>
> class Prueba(object):
>        def __new__(cls, *args):
>                if args[0] == 0:     # reemplazar por la llamada a la capa inferior
>                        return None # reemplazar
>                return object.__new__(cls)
>        def __init__(self, nombre, ciudad):
>                self.nombre = nombre
>                self.ciudad = ciudad


> La otra duda es como se puede modificar los valores de *args para
> enviarselos cuando uno llama al método __new__?

No entiendo bien dónde quieres modificar los valores de *args. Tal vez
usando metaclases o, más simple, con un decorador.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es