[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