[pyar] [video] En Python tenemos nombres, no variables.

Claudio Freire klaussfreire en gmail.com
Jue Jun 5 11:38:39 ART 2014


2014-06-05 10:45 GMT-03:00 Alejandro Santos <listas en alejolp.com>:
> 2014-06-05 15:41 GMT+02:00 Alejandro Santos <listas en alejolp.com>:
>>
>> Y esto viene porque si tenes un objeto de clase Clase, donde Clase es
>> un objeto, no podés tener una Clase con clase Clase, tenés que tener
>> una "meta-clase" que sea la progenitora de tu Clase, por ejemplo
>> CClase. Y lo mismo CClase, es un objeto, con clase CCClase.
>>
>
> (sigo)
>
> Es una definición recursiva estándar. En general no podés definir un X
> diciendo "X es un X", tenés que expresarlo en términos de otra cosa
> más general.
>
> (a diferencia de la RAE que cuando buscas "cosas" te dice "es el
> plural de cosa" y "cosa" te dice "es el singular de cosas")

Claro que se puede. Es la idea detrás de los representantes de clases
de equivalencia (algo de matemática por si no te suena).

La clase "Clase" es una clase de equivalencia. El objeto que vos tomás
como la clase "Clase" (que obtenés con type) es sólo un objeto dentro
de esa clase que lo representa.

Clase es una Clase. Son la misma palabra, pero no el mismo concepto.
Uno es un objeto. El otro es una clase de equivalencia de objetos.


2014-06-05 10:41 GMT-03:00 Alejandro Santos <listas en alejolp.com>:
> En la facultad tuve una matería que se llamaba "OOP" y que uno de los
> temas era "Teoría de Objetos", donde mi profesor contó esta recursión
> infinita con infinito+1 en nil/null/Null.
>
> Y esto viene porque si tenes un objeto de clase Clase, donde Clase es
> un objeto, no podés tener una Clase con clase Clase, tenés que tener
> una "meta-clase" que sea la progenitora de tu Clase, por ejemplo
> CClase. Y lo mismo CClase, es un objeto, con clase CCClase.


Está equivocado:

Python 2.7.6 (default, Nov 21 2013, 15:55:38) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class C:
...    pass
...
>>> type(C)
<type 'classobj'>
>>> type(type(C))
<type 'type'>
>>> type(type(type(C)))
<type 'type'>
>>>

No *tenés* que tener una meta-meta-clase, porque evidentemente Python
no la tiene.

La clase "type" acá está definida por fuera del lenguaje. En Smalltalk
pasa lo mismo, y no hay nada más OOP que Smalltalk.

¿Cómo se representa eso en la computadora? No importa. En el lenguaje,
el tipo de una clase es Clase (type acá porque está en inglés) y la
clase de Clase es Clase también. Puede sonar raro, pero tiene sentido,
pues la clase y la meta-clase que mencionás se comportan idéntico, así
que no pueden ni necesitan ser diferenciadas. Porque el tipo de algo
como lo ves dentro de un programa es un objeto, no una clase. No podés
hacer type() de una clase, porque la clase no es un objeto (es un
grupo de objetos similares), es algo conceptual. No es parte del
lenguaje.

Anotando a Kay:

1. Todo es un objeto (No una clase)
2. Los objetos se comunican enviando y recibiendo mensajes (métodos -
que son objetos a su vez).
3. Los objetos tienen memoria (formada por objetos - no necesariamente
no-vacía, ojo).
4. Todo objeto **es una instancia de una clase** (o sea, los objetos
se dividen en clases de objetos de similar comportamiento, es un orden
conceptual, no hay variedad infinita de comportamiento - y el
comportamiento es un objeto, o sea, hay un objeto que representa a la
clase en su conjunto - ese objeto, también, tiene un comportamiento
discretamente clasificado ).
5. La clase contiene el comportamiento compartido de sus instancias
(la clase pues tiene objetos que describen el comportamiento de sus
instancias - los métodos en sí mismos)
6. La ejecución de un programa, el control pasa al primer objeto (el
famoso Main) y el resto es tratado como el mensaje (los argumentos)

Luego, si un objeto tiene el comportamiento de una clase, lo que
sucede con los representantes de clase, entonces la clase de ese
objeto clase es la clase misma, pues tiene el mismo comportamiento. Se
comporta como Clase. Qué clase es en particular está representando
está definido en la memoria del objeto Clase, que es parte de la
*instancia*. Nada impide pues que la clase de un objeto sea
representado por el objeto mismo, si el comportamiento de las
instancias es uniforme y es el comportamiento de una clase.

Completamente consistente. Espero que claro también.


More information about the pyar mailing list