[Python-es] encapsular llamadas a metodos arbitrarios desde una clase container
G V
nadaird en gmail.com
Vie Oct 5 19:07:34 CEST 2012
si no te molesta tocar un poco de programación funcional, lambdas y demas:
a = ['hola', 'adios']
map(lambda x:x.swapcase(), a)
esto da un resultado de:
['HOLA', 'ADIOS']
espero que te sirva para orientar lo que quieres hacer ;)
2012/10/5 Carlos Zuniga <carlos.zun en gmail.com>:
> 2012/10/5 Jose Caballero <jcaballero.hep en gmail.com>:
>> 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.
>
> Tal vez algo como:
>
> class Cont:
> ...
> def __getattr__(self, atr):
> def foo():
> outs = []
> for o in self.list_obj:
> out = getattr(o, atr)()
> outs.append(out)
> return outs
> return foo
>
>
>>
>> Saludos cordiales,
>> Jose
>> P.S. perdon por la ausencia de tildes.
>
> UTF existe, ya no es excusa ;-)
>
> Saludos
> --
> A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
> de leer manuales.
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
Más información sobre la lista de distribución Python-es