[pyar] Ejecutar un método al finalizar la instanciación

Pablo Ziliani pablo en kultroom.com
Dom Jul 11 22:02:28 ART 2010


Juan BC wrote:
> El 11/07/10 21:05, Roberto Alsina escribió:
>> On Sunday 11 July 2010 20:51:56 Juan BC wrote:
>>> El tema es que el metodo init tengo que redefinirlo y bastante... no en
>>> una jerarquia sino tengo muchas clases derivadas. y quiero que sin
>>> necesidad de llamar a "metodo" en en el __init__ aun asi se ejecute. Es
>>> un codigo de comprobacion el que tengo que lanzar.
>>
>> Metaclases, creo.
>
> Ya mi __metaclass__ esta definida como un ABCMeta... la verdad que toy 
> medio perdido con esto

A ver si queda un poco más claro, vos no querés tocar:
    - la clase A
    - la (meta) clase ABCMeta
    - el __init__ de las clases derivadas (B())

¿no podés/querés componer la metaclase?

Otra opción es decorando la clase (chancha para mi gusto, con pitfalls 
que ni me imagino, no probé qué pasa cuando tenés una metaclase en el 
medio):

 >>> def llama_a_metodo(cls):
...     __init__original = cls.__init__
...
...     def deco_init(self, *args, **kwargs):
...             cls.metodo(self)
...             __init__original(self, *args, **kwargs)
...
...     cls.__init__ = deco_init
...     return cls
...
 >>> class A(object):
...     def metodo(self):
...             print "WAWAWA"
...
 >>> @llama_a_metodo
... class B(A):
...     pass
...
 >>> B()
WAWAWA
<__main__.B object at 0x984ab4c>

En cualquier caso, creo que vas a tener que mandar un poco de código 
real, si no es demasiado para adivinar...



More information about the pyar mailing list