Metaclases, crear funciones a partir de plantillas de texto

Ernesto Revilla erny en sicem.biz
Mar Mayo 4 19:48:39 CEST 2004


Hola Chema y Francesc,
gracias por las clases!

curiosamente me funcionaba también con __init__. Lo que no me queda muy 
claro qué diferencias hay en cambiar el diccionario que me proporciona 
vía __new__ o modificando self en __init__. ¿Hay documentación sobre 
cómo programar metaclases en Python?

Erny

Chema Cortés escribió:
...

>Empleando __new__ en lugar de __init__ en la metaclase. Una vez que está 
>creada la clase, sus atributos son de sólo lectura. Por eso hay que modificar 
>el diccionario antes de la creación de la clase:
>
>class Metaclase2(type):
>    def __new__(self, name, bases, dic):
>        if "_attributes" in dic:
>            for attr in dic['_attributes']:
>                # crear getter y hacerlo accesible como getAtributo
>                capAttr=attr.capitalize()
>                getterName,setterName="get"+capAttr,"set"+capAttr
>                exec("def %s(self): return self._%s" % (getterName,attr),dic)
>                exec("def %s(self, value): self._%s=value" % 
>(setterName,attr),dic)
>        return type.__new__(self, name, bases, dic)
>
>class B(object):
>    __metaclass__=Metaclase2
>    _attributes=["nombre","apellidos"]
>
>b=B()
>b.setNombre("Erny")
>b.setApellidos("Revilla")
>print b.getNombre(),b.getApellidos()
>
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo/python-es
>
>  
>




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