Derivacion de tipos, interceptar operaciones
Oswaldo Hernández
listas en soft-com.es
Mar Mar 18 12:27:26 CET 2008
Chema Cortes escribió:
>
> Evidentemente, necesitas "metaclases":
>
> class M(type):
> def __new__(meta,name,base,dic):
> dic.update({
> "Valido":True,
> "Rango":None,
> "__new__":_Super_new_,
> })
> return type.__new__(meta,name,base,dic)
>
> class c_int(int):
> __metaclass__=M
>
> class c_date(datetime.date):
> __metaclass__=M
>
>
> De manera similar, se pueden definir todos los wrappers a los métodos
> estáticos dentro de la metaclase:
>
>
> Operadores = ("__add__", "__sub__", ....)
>
> def __wrapper(op):
> def __supermethod(self, *args,**kwds):
> if not self.Valido:
> raise ValueError
> if hasattr(args[0], "Valido") and not args[0].Valido:
> raise ValueError
> return getattr(self.__base__, op)(self, *args, **kwds)
> return __supermethod
>
> class M(type):
> def __new__(meta,name,base,dic):
> dic.update({
> "Valido":True,
> "Rango":None,
> "__new__":_Super_new_,
> })
> for op in Operadores:
> dic[op]=__wrapper(op)
>
> return type.__new__(meta,name,base,dic)
>
>
> Lo he hecho muy rápido, así que mejor será que revises y lo ajustes a lo que
> quieres hacer. Creo que por aquí tienes por donde trabajar.
>
>
Uff, esto hay que digerirlo.
He hecho una prueba rápida y no me funciona, lo veré con detenimiento los proximos dias y ya te diré
si he conseguido adaptarlo a las metaclases.
Gracias.
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es