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

Claudio Freire klaussfreire en gmail.com
Jue Jun 5 10:35:51 ART 2014


2014-06-05 9:06 GMT-03:00 Alejandro Santos <listas en alejolp.com>:
> Por ejemplo la "teoría de objetos" dice que "todo es un objeto y todo
> objeto tiene una clase", entonces una clase es un objeto que tiene una
> clase: la meta clase. Pero la meta clase es también un objeto con
> clase: la meta-meta-clase. Infitinamente hasta que infitinito+1 es una
> meta-meta-meta-...-meta-clase cuya clase es Null. Pero cualquiera que
> mas o menos sepa matemática sabe que esto es un absurdo, porque
> infinito+1 no existe en ninguna interpretación.

Creo que estás algo equivocado ahí.

La clase de un objeto es otro objeto, sí, pero objeto. No clase.

La clase de la clase es Clase. Todas las clases son de tipo Clase, son
**instancias** de Clase.

O esa es una forma de hacerlo (y la más común).

El paradigma orientado a objetos no quiere decir que todo tiene que
*estar compuesto* por objetos. Sino que todo *es* un objeto. La
distinción, aunque sutil, es importante.

No todos los objetos son composición de otros.

En los paradigmas orientados a objetos más puros, como Smalltalk, los
objetos primitivos (que no se componen de otros objetos) son en
general construcciones sintácticas más que binarias.

En Smalltalk, por ejemplo, se decidió no definir al "if" como parte de
la sintaxis, sino de la librería estándar, por ejemplo. La sintaxis de
Smalltalk es minimalista al punto que con metaprogramación se pueden
conseguir lenguajes muy diferentes, justamente porque la sintaxis es
mínima e impone un mínimo de reglas, dejando mucho para metaprogramar.
Esta decisión es la que resulta en que el cuerpo de un "if" (cosa que
no existe en Smalltalk como parte del lenguaje en sí, sino que es una
función definida en smalltalk como parte de una lib) sea un objeto.
Justamente porque se pasa por parámetro a la función if.

En python tranquilamente se puede hacer así, y de hecho muy a la
Smalltalk. Sólo no es pythónico, es Smalltálkico.

def _if(cond, then_, else_):
    return cond()[-1] and then_()[-1] or else_()[-1]

x = input()
_if( lambda:[x>3], then_=lambda:[
     print("hola"),
     True
], else_= lambda:[
     print("chau"),
     True
])

Obvio que lo de arriba se puede mejorar, pero ni me molesté ;)

Ahí tenés un if cuyo cuerpo es un objeto. Un closure, para ser más
preciso. Tipo Smalltalk.


More information about the pyar mailing list