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

Chema Cortes pych3m4 en gmail.com
Lun Jun 15 13:13:44 CEST 2009


El 12 de junio de 2009 18:28, Milton Galo Patricio Inostroza
Aguilera<minoztro en gmail.com> escribió:
> El 11 de junio de 2009 4:15, Chema Cortes<pych3m4 en gmail.com> escribió:
>> Según dice la documentación:
>>
>> - cuando __new__(cls,...) devuelve una instancia de 'cls', se invoca
>> __init__ para inicializar la instancia
>
> esos puntitos al parecer son mentirosos...ya que si le envías un
> argumento más que cls tira el siguiente warning:

Hay que tener en cuenta que a __new__ se le pasan los mismos
argumentos que a __init__


> La idea de esta clase es desacoplarse un poco del orm, ya que
> posterior me gustaría utilizar esta clase quizás con sql a pelo :-) .

Yo lo único que veo es, sea en __new__ como __init__, vas a tener
código específico implicando al orm, por lo que el desacople no lo vas
a conseguir así.

No entiendo para qué complicarse tanto. Tal como yo lo haría, crearía
una clase abstracta de la que deriven dos clases: una que carga del
ORM y otra para cuando cargue directamente de SQL.


class ProductAbstract(object):
  def __init__(self):
    self.data=None

  def getData(self,*args):
    pass

  def hasData(self):
    return self.data is None

class ProductORM(ProductAbstract):
  def getData(self, barcode):
    self.data=models.Producto.objects.get(codigo_barra=barcode)

 class ProductSQL(ProductAbstract):
  def getData(self, query):
    ...
    cur.execute(query)
    self.data=cur.fetchall()


La idea habría que desarrollarla más para llevar los métodos comunes a
la clase abstracta.
_______________________________________________
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