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