[Python-es] encapsular llamadas a metodos arbitrarios desde una clase container

Jose Caballero jcaballero.hep en gmail.com
Vie Oct 5 17:42:49 CEST 2012


Hola,



pido disculpas por adelantado por lo criptico del "subject". Intentare
explicar mejor lo que quiero hacer.
Quiero crear una clase Container que contiene una lista de objetos de una
clase X arbitraria.


------------------------------------------------------------------------------
class Container:
    def __init__(self, list_obj):
        self.list_obj = list_obj

class X:
    blah

x1 = X()
x2 = X()
x3 = X()

container = Container( [ x1, x2, x3] )
------------------------------------------------------------------------------


Me gustaria poder llamar a un metodo cualquiera en Container, y que
internamente haga un loop de llamadas a ese mismo metodo para todos los
objectos de la lista.
Por ejemplo, si hago

container.f()

que internamente se haga un loop de llamadas:

x1.f()
x2.f()
x3.f()


Lo mas cerca que estoy de conseguirlo es con lo siguiente:


------------------------------------------------------------------------------
class Container:
       ...
       ...
       def __getattr__(self, atr):
                    outs = []
                    for o in self.list_obj:
                            out = getattr(o, atr)()
                            outs.append(out)
                    return outs
------------------------------------------------------------------------------


con ese codigo puedo hacer

container.f
container.g
container.h

pero no

container.f()
container.g()
container.h()


Sigo investigando, pero si mientras tanto alguien me ofrece una pista, sera
mas que bienvenida.


Saludos cordiales,
Jose
P.S. perdon por la ausencia de tildes.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20121005/f470dbb4/attachment.html>


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