Derivacion de tipos, interceptar operaciones

Oswaldo Hernández listas en soft-com.es
Lun Mar 17 16:04:59 CET 2008


Chema Cortes escribió:
> El 2008/3/14, Oswaldo Hernández <listas en soft-com.es> escribió:
> 
>>  Segun he entendido de la documentación, cuando se utilizan los operadores +, -, etc .. se ejecutan
>>  las funciones correspondientes __add__, __sub__, ..
>>
>>  ¿Habria alguna forma de interceptar estas operaciones cuando se utilizan operadores?
> 
> El método __getattribute__ sólo se invoca en la búsqueda "explícita"
> de atributos, lo cuál ocurre al usa el operador '.' (punto) o con la
> función getattr(). Para la búsqueda "implícita" de atributos, el
> intérprete python, por optimizar, se las apaña para evitar usar los
> métodos de la instancia, por lo que no resulta posible interceptar
> esta búsqueda. Sólo usará los __getattr__ y __getattribute__ si no
> queda más remedio.
> 
Despues de un fin de semana de pruebas me supuse que ocurria lo que dices, el acceso a algunos 
metodos se realiza de forma directa, sin pasar por __getattribute__. Busqué documentacion que 
confirmara esto, pero no la encontré.


> No hay que irse a las operaciones aritméticas para comprobarlo:
> tampoco se puede interceptar el acceso a '__init__' ni '__new__'. Como
> mucho se puede suplantar estos métodos por otros, pero resulta
> imposible crear un "accesor" genérico que funcione completamente.
> Digamos que aún queda un pequeño trecho para unificar tipos y clases.

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.

Saludos,

-- 
*****************************************
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