Re: ¿es posible crear nuevos operadores?

Jose Caballero jcaballero.hep en gmail.com
Dom Sep 21 04:46:03 CEST 2008


El 20 de septiembre de 2008 16:33, Raydel Miranda Gomez <
rmiranda en estudiantes.uci.cu> escribió:

> >Es posible sobrecargar o redefinir el funcionamiento de los operadores
> >existentes, reimplementando los métodos que les dan soporte. Puedes ver
> >una lista de los métodos existentes en el módulo operator
> >(http://docs.python.org/lib/module-operator.html#l2h-1102 ). En este
> >hilo se explica algo más: http://bytes.com/forum/thread159908.html
>
> Si pero no me parece que sea eso lo que esta buscando Jose Caballero, segun
> entendi, elno quiere sobrecargar ningun operador, sino crear uno nuevo,
> claro esta, despues de eso, seria muy util poder sobrecargarlo.
>
> Pero yo mantengo mi opinion que para eso, hay que entender como estan
> definidos  los operadores que ya existen. Y tengo mis dudas acerca de la
> capacidad del interprete para poder agregarle a base de modulos otros
> operadores. Es decir, pienso que lo mas probable es que sea necesario
> parchearlo, para que acepte el nuevo operador. Pues seguro que el interprete
> tiene(o genera, no lo se) una tabla de simbolos, donde se encuentran los
> mismos.
>
> Es por eso que a lo mejor(tampoco lo se, estoy tirando una piedra) con una
> extencion al interprete hecha en c/c++, se pueda solucionar el problemilla
> ese, que dicho sea de paso, es muy interesante. La implementacion de
> operadores con nuevas funcionalidades, simplificaria el trabajo de muchos
> programadores.(reutilizacion sennores) :-D
>
>
En efecto, en lo que estoy interesado en la posibilidad de crear nuevos
operadores.
Pero no deja de ser simplemente por mi curiosidad científica, más que una
necesidad real.
Aunque suelen ser las curiosidades "porque sí" las que hacen avanzar el
mundo.

Muchas gracias a todos por vuestros comentarios.


Y explico que todo esto empezó casi como un juego con un compañero del
curro.
Estábamos jugando con la idea de crear clases para ejecutar comandos,
instanciar objetos de esas clases, y usarlos a modo de librería de tal forma
que el usuario pudiera escribir programas en python imitando más o menos la
sintaxis de la shell.

Por poner un ejemplo muy tonto, el comando ls.

# ----- mycommands.py  ----------

import commands

class Command(object):
        def __init__(self, command):
                self.command = command
        def __sub__(self, option):
                command = '%s %s' %(self.command, option())
                print commands.getoutput( command )

class Option(object):
        def __init__(self, option):
                self.option = option
        def __call__(self):
                return ' -%s ' %self.option

ls = Command('ls')
l = Option('l')
t = Option('t')
r = Option('r')
#... etc

# ------- prog.py  -----------

from mycommands import *
ls -l
ls -t
ls -r


Que no deja de ser una chorrada, pero tiene cierta gracia.
Pero no se puede ir más allá de una única opción (o no veo cómo).
Y mi colega y yo nos estábamos preguntando cómo hacer que sea recursivo
(simplemente añadiendo opciones) y ejecutándose sólo cuando se llega al
final.
Pero, ¿cómo sabe que se ha llegado al final, no hay más opciones,y ya se
puede ejecutar todo?

Y pensé, si pudiera crear el operador ;  podría ponerlo al final, y mi
programa en python quedaría tal que

ls -l -r -t;

En fin, como digo, una tontería. Divertida, pero tontería.


Saludos,
Jose
_______________________________________________
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