Derivacion de tipos, interceptar operaciones

Chema Cortes pych3m4 en gmail.com
Lun Mar 17 19:40:20 CET 2008


El 17/03/08, Oswaldo Hernández <listas en soft-com.es> escribió:

> Buscando solucion a esto he encontrado otra discrepancia entre tipos y clases "normales". El
>  __dict__ de una clase normal es un diccionario, mientras que en una clase derivada de un tipo es un
>  objeto 'dictproxy', el cual no se puede utilizar directamente, o por lo menos yo no he encontrado como.

En realidad, más que discrepar, es una parte del mecanismo para poder
unificar ambos conceptos (PEPs 252 y 253) con el que se implementa el
protocolo del "descriptor" (por cierto, procotolo implementado gracias
al método __getatribute__ del tipo 'object', progenitor de todas las
clases nuevas).

El "dictproxy" funciona igual que un diccionario (protocolo
"mapping"). Lo que pasa es que sus items están protegidos contra
escritura, por lo que de poco te servirá.

http://www.python.org/dev/peps/pep-0252/
http://www.python.org/dev/peps/pep-0253/

Es muy complejo de explicar, por lo que te remito a estos PEPs y a los
tutoriales que hay por http://cafepy.com (y, si te animas, a revisar
el código C). Así, por encima, puedo contarte que los atributos
"estáticos" (aquellos que obtiene la clase por ser un "tipo de dato")
se implementan mediante "slots". Estos slots apuntan inicialmente a
métodos facilitados por el tipo de dato, y son sustituídos por los que
suplanta la herencia (atributos dinámicos). Los métodos estáticos son
mucho más rápidos de ejecutar por el intérprete, evitando la
sobrecarga que impone una herencia pura con las operaciones básicas
estándar. Supongo que, por éso mismo, python resulta bastante más
rápido que smalltalk y lenguajes similares.

La única solución para tu problema sería crear "wrappers" para todos y
cada uno de los métodos estáticos que tenga el tipo de dato, algo como
se cuenta en esta receta:

http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496741
_______________________________________________
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