[Python-es] Tipos en python (Re: Contar en lista)

Chema Cortes pych3m4 en gmail.com
Mie Nov 17 18:25:40 CET 2010


El día 16 de noviembre de 2010 23:29, Milton Galo Patricio Inostroza
Aguilera <minoztro en gmail.com> escribió:

> en realidad hace tiempo que leí estos artículos y me ayudaron mucho
> :-)...ahora que estoy estudiando sistemas de tipos, la teoría dice que
> en un lenguaje con tipeo dinámico lo único que existe en tiempo
> estático es un solo tipo y que en tiempo de ejecución los nodos del
> AST están marcados con una etiqueta que dicen a que clase de valor
> pertenecen: entero, lista, función, etc....habría que ver como está
> implementado el interprete de python :-)

Este modo de ver los tipos me "chirría" mucho. Que los nodos AST
tengan "referencias" a objetos no implica que la "referencia" sea el
tipo "estático" existente. Para cada tipo "estándar" hay siempre en
todo momento sus elementos vacíos ( "" , [] , () , 0.0 ), además de
los enteros del -1 al 99 (con True y False como subtipos) y algunos
singletones como None. El código AST, tal como dice su nombre, no es
más que una "abstracción" que no tiene en cuenta el modelo de tipos
real, sobre todo cuando la persistencia de los objetos no está
determinada por la persistencia del propio árbol AST.

Los tipos estándar de python se definen como "instancias" de la clase
"type", y en todo momento están creadas las instancias 'int', 'bool',
'long', 'float', etc. etc., por lo que se puede afirmar que existe un
modelo de tipos de datos "estático", previo a la ejecución del código.
El tipado dinámico viene a significar que del comportamiento de un
objeto no podemos inferir su tipo. Dicho de otro modo, el
comportamiento de un objeto se puede obtener por adquisición
(instanciando una clase/tipo) o por implentación de un "interface" que
simule el tipo (patrones delegación, factoría,... == metaclase). En
todo caso, la riqueza de tipado de datos va mucho más allá del
análisis sintáctico que pueda realizarse estáticamente.


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