Re: [Programación] Re: [Programación] La bola de cristal en la programación (Era: Ayuda con código para procesar textos)

Mariano Benedettini drstein en gmail.com
Mie Feb 25 12:02:05 ART 2009


2009/2/25 Angel Arancibia <angel.arancibia en gmail.com>:
> El día 25 de febrero de 2009 10:09, Horacio Castellini
> <horacio9573 en yahoo.com.ar> escribió:
>> Para retomar el topic, relacionado con el tema de la introspección sujerida... lo que pude avieriguar es esto...
>> ---------------------------------------
>> Es la capacidad que tiene en un lenguaje de programación en que sus
>> elementos pueden obtener información sobre sí mismos y sobre el
>> sistema sobre el cual se ejecutan.
>>
>> Como cuando haces
>>
>>>>> import sys
>>>>> dir(sys)
>>
>> Así puedes conocer todos los campos y métodos de un objeto (todo en
>> python es un objeto, no hay primitivas), obtener referencias de un
>> método o propiedad por su nombre.
>>
>>>>> getattr(__builtins__,"sum")([3,4])
>> 7
>>
>> Si se consideran todos los métodos mágicos de los objetos de Python,
>> __self__ (él mismo), __class__ (la clase a la que pertenece), __doc__
>> (la documentación asociada), __repr__ (su representación como cadena),
>> etc. Pues así cualquier objetos puede saber bastante de si mismo, del
>> entorno donde se ejecutan y de los objetos presentes (funciones
>> globals() o locals())
>>
>> Este tipo de mecanismos son ejemplos de lo que es la introspección de Python.
>> ------------------------------------------------------
>>
>> Vaya, vaya, nunca imaginé que la inferencia fuera posible asociarla a conjuntos recursivos de operaciones, por lo tanto computables... para mi siempre el acto de inferir estaba asociada a la elaboración de juicios isomorfos al problema de la parada, el cual es no computable. (Según Penrose, Turin y Godel)
>>
>
> Es que asi es, es no computable, por eso la inferencia de tipos total
> o absoluta  (que por lo que estoy aprendiendo aca no es lo mismo que
> la introspeccion) es imposible.
> Esa (no introspeccion, si inferencia) es el problema isomorfo al de la
> parada (tengo mis serias duda que la introspeccion lo sea). Por eso lo
> que se hace es hacer una aproximacion (de hecho una gran aproximacion,
> acordate que ademas tiene que ser relativamente rapido) para reducir
> que expresiones tipan, y cuales no. Obviamente como es una
> aproximacion, hay expresiones que tipan que no son reducidas y
> expresiones que no tipan que tampoco son reducidas (sino no habria
> problema de la parada : -0 ). De ahi la diferencia entre tipado
> fuerte, y el resto.
>
> Estoy tratando de entender aun bien la introspeccion, por ahora no
> tengo mucho tiempo, peor parece un tema interesante. Alguien tiene
> documentacion teorica sobre este metodo?
>
> Saludos,
>
> Angel
>

Así es, la introspección en Python te permite hacer cosas como esta
(preguntar por el tipo de un objeto):

>>> a = 'lala'
>>> type(a)
<type 'str'>
>>> type(a) is str
True

Y el duck typing permite, por ejemplo, en una misma colección juntar
objetos de distinto tipo:

>>> a = 'lalala'
>>> b = 666
>>> class MiClase :
...     def __repr__(self): return 'Objeto de tipo MiClase'
...
>>> c = MiClase()
>>> lista = [a,b,c]
>>> print lista
['lalala', 666, Objeto de tipo MiClase]

En este caso, los patos sólo necesitan ser representables por pantalla.



Más información sobre la lista de distribución Programacion