[Pytho-es] metaclases y operaciones con clases

Chema Cortes pych3m4 en gmail.com
Sab Jun 30 17:57:38 CEST 2007


El 30/06/07, tny <a.porrua en gmail.com> escribió:
>
> > Cuando uno sabe todo lo que necesita saber para programar, viene david
> > con su pequeña gran introducción a las metaclases a complicarnos la vida
> > XD
> >
> > Pues tenía un proyectín en mente que iba a hacer, cómo no, sin
> > metaclases. Pues casualidades de la vida, que me he dado cuenta de que
> > las meta clases me vienen de perlas.
> >
> > Sólo hay un único problema, que ahora me encuentro en medio del desierto
> > porque no quiero hacerlo sin y no sé hacerlo con...
> >
> > La duda y cuestión: ¿con metaclases se podría hacer lo siguiente?¹

Mejor te lo ilustro:

class __metaclass__(type):
    def __add__(a, b):
        class Compo:
            def __call__(self,*args,**kw):
                return [cls()(*args,**kw) for cls in (a,b)]
        return Compo

class Producto:
    def __call__(self,a,b,*args,**kw):
        return a*b

class Hola:
    def __call__(self,*args,**kw):
        print "hola"

Suma=Producto+Hola

print Suma()(2,3)


No es conveniente utilizar las clases como si fueran meros objetos.
Crea una instancia, aunque sea única (singleton). Reconozco que las
metaclases pueden ilusionar mucho al principio, pero no es nada bueno
abusar de ellas. Recuerdo, por ejemplo, que con los inicios de
cherrypy2 sugerí emplear las metaclases para muchas tareas
relacionadas con la programación orientada a aspectos. El problema es
que se llegaba a tal extremo que se perdía la intuición sobre lo que
iba a hacer el código. Acabó desechándose el tema de las metaclases y
se optó por los "decoradores" que tiene ahora cherrypy.




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