[pyar] Consulta de disenio de clases.
Juan Gabardini
jgabardini en gmail.com
Vie Feb 25 17:58:43 ART 2011
hola
Las clases parecen muy acopladas, y en tu último ejemplo, parece que A no
necesita conocer a B para nada.
Quizás puedas comentar que querés resolver y podríamos tirar ideas para
diseños alternativos.
una forma alternativa (de lo que entendí inicialmente) sería
class Config:
def __init__(self, par1, par2):
self.par1=par1
self.par2=par2
def parametros(self):
return self.par1, self.par2
class ClaseA:
def __init__(self, conf):
self.conf= conf
def metodoA(self):
par1, par2 = self.conf.parametros()
print("los parametros en A son: %d, %d") %(par1, par2)
class ClaseB:
def __init__(self, conf):
self.conf= conf
def metodoB(self):
par1, par2 = self.conf.parametros()
print("los parametros en B son: %d, %d") %(par1, par2)
if __name__ == '__main__':
config= Config(1,2)
objetoA = ClaseA(config)
objetoB = ClaseB(config)
objetoA.metodoA()
objetoB.metodoB()
2011/2/25 Gonzalo <gonchi.sanchez en gmail.com>
> Al final no era tan complicado, algo basico. Gracias EHB, lo resolvi de la
> siguiente manera (seguro se puede hacer mejor y mas bonito):
>
> class ClaseA(object):
> def setInstanciaB(self, objeto):
> self.instanciaB = objeto
> def setFancyMsg(self, msg):
> self.fancymsg = msg
> def hitme(self):
> print self.fancymsg
> return
>
> class ClaseB(object):
> def setInstanciaA(self, objeto):
> self.instanciaA = objeto
> return
> def pasarFancyMsgA(self):
> self.instanciaA.setFancyMsg("Hola Tarolas!")
> return
> def hacerAlgo(self):
> print "Calling home..."
> self.instanciaA.hitme()
> print "Done!"
> return
> def run(self):
> self.pasarFancyMsgA()
> self.hacerAlgo()
> return
>
> def main():
> objetoA = ClaseA()
> objetoB = ClaseB()
> objetoA.setInstanciaB(objetoB)
> objetoB.setInstanciaA(objetoA)
> objetoB.run()
>
> Gracias nuevamente.
>
> slds,
>
> El 25 de febrero de 2011 17:31, Gonzalo <gonchi.sanchez en gmail.com>escribió:
>
> Perdon nicolas, explique que no tengo enie en este teclado! ;)
>>
>> EHB gracias, algo asi...
>> A los demas, por si no quedo muy clara la idea seria hacer algo como:
>>
>> class ClaseA:
>> def metodoA(par1, par2):
>> print("los parametros en A son: %d, %d") %(par1, par2)
>>
>> def pasarParametros():
>> miReferenciaObjetoB.metodoB(par1, par2)
>>
>> class ClaseB:
>> def metodoB(par1, par2):
>> print("los parametros en B son: %d, %d") %(par1, par2)
>>
>> def pasarParametros():
>> miReferenciaObjetoA.metodoA(par1, par2)
>>
>> def main:
>> objetoA = ClaseA()
>> objetoB = ClaseB()
>>
>>
>> Evidentemente para que el objetoA tenga una referencia al objetoB, deberia
>> llamar a una funcion o un objeto "mas alto" jerarquicamente, del cual poder
>> obtener la referencia al objeto necesario... Pregunte lo del singleton
>> porque esto una vez lo hcie en java aplicando singleton; tenia una especie
>> de objeto "Dios", encargado de crear los demas objetos, y cada vez que desde
>> un objeto "hijo" necesitaba pasar referencia a otro, lo hacia llamando a un
>> "Dios.getObjetoX.pasarParametro(x,y,z)"... Que es masomenos lo que necesito
>> aca...
>> Podria hacerse por ejemplo con variables globales? Es decir, en mi main,
>> objetoA y objetoB son globales, tales que se pueden llamar de cualquier
>> clase (esto no lo probe todavia), igual esto seria medio como una fantochada
>> porque estaria mezclando temas de distintos paradigmas, que es lo que no
>> quiero hacer...
>> Muy probablemente tengo un error de conceptos, pero necesito un tip que me
>> haga avivarme!
>> Muchas gracias.
>>
>> slds,
>>
>> 2011/2/25 nicolás rosbaco <antiyanki en gmail.com>:
>>
>> > diseÑÑÑÑo
>> >
>> > El 25 de febrero de 2011 13:02, Gonzalo <gonchi.sanchez en gmail.com>
>> escribió:
>> >>
>> >> Hola gente, como les va? Hoy tengo una consulta sobre el disenio del
>> >> esquema de clases de mi programa, paso a explicar:
>> >> Tengo una ClaseA, y una ClaseB dentro de un mismo file. Tambien una
>> >> funcion main que crea un objetoA y un objetoB (de clases A y B
>> >> respectivamente). Ahora bien, necesito llamar desde el objetoB a un
>> >> metodo de objetoA, es decir, que el objetoA realice un metodo con
>> >> argumentos que el objetoB conoce.
>> >> La unica forma de hacerlo es aplicando un patron de disenio? (ejemplo
>> >> singleton) Si es asi, alguna forma "comoda y linda" para hacerlo?
>> >> busque pero las veo demasiado complicadas para mis vagos conocimientos
>> >> de python.
>> >> Quizas sea muy basico lo que estoy preguntando, es que hace poquito
>> >> que migre "en serio" a python, antes hice scripts para nada
>> >> complicados y no en objetos.
>> >> Bueno, espero no molestarlos, muchas gracias de antemano!
>> >>
>> >> slds,
>> >>
>> >> PD: Perdon por la ortografia, tengo un teclado ingles... :P
>> >>
>> >> --
>> >> Gonzalo.
>> >> _______________________________________________
>> >> pyar mailing list pyar en python.org.ar
>> >> http://listas.python.org.ar/listinfo/pyar
>> >>
>> >> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>> >
>> >
>> >
>> > --
>> > "En un país colonial las oligarquías son las dueñas de los diccionarios"
>> > (John William Cooke)
>> >
>> > _______________________________________________
>> > pyar mailing list pyar en python.org.ar
>> > http://listas.python.org.ar/listinfo/pyar
>> >
>> > PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>> >
>>
>>
>>
>> --
>> Gonzalo.
>>
>>
>
>
> --
> Gonzalo.
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
--
Juan Gabardini
twitter&skype:jgabardini | http://softwareagil.blogspot.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110225/b850f1a9/attachment.html>
More information about the pyar
mailing list