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