¿es posible crear nuevos operadores?
Oswaldo Hernández
listas en soft-com.es
Dom Sep 21 14:51:29 CEST 2008
Jose Caballero escribió:
>
...
> 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).
Prueba este codigo ;)
< code: xpruebas.comandos.py >
#!/usr/bin/env python
#coding=utf-8
class Opcion:
def __init__(self, opt):
self.opt = opt
class Comando:
def __init__(self, cmd):
self.__cmd = cmd
self.opciones = ""
def __sub__(self, opt):
# verificacion de opcion
if not isinstance(opt, Opcion):
raise TypeError("'%s' no es una opción valida para el comando '%s'" % (opt, self.__cmd))
opcion = " -%s" % opt.opt
if "%s " % opcion in self.opciones:
# el comando esta repetido, ignorar
return self
# agregar a lista de opciones
self.opciones += opcion
return self
def __repr__(self):
# vaciar cache de opciones para la siguiente ejecucion
opciones = self.opciones
self.opciones = ""
return "%s%s" % (self.__cmd, opciones)
</code: xpruebas.comandos.py>
>>> from xpruebas.comandos import Comando, Opcion
>>> ls = Comando("ls")
>>> l = Opcion("l")
>>> t = Opcion("t")
>>> r = Opcion("r")
>>> x = Opcion("x")
>>> x1 = Opcion("x1")
>>> x2 = Opcion("x2")
>>> ls -l
ls -l
>>>
>>> ls -r -x2 -x1 -x -t -r -r
ls -r -x2 -x1 -x -t
>>> ls -5
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "x:\Python\xpruebas\comandos.py", line 17, in __sub__
raise TypeError("'%s' no es una opción valida para el comando '%s'" % (opt, self.__cmd))
TypeError: '5' no es una opción valida para el comando 'ls'
--------
Como ejercicio o entretenimiento no esta mal, pero como aplicacion real lo dudo, ya que tiene varios
problemas:
. Siempre esta utilizando las mismas instancias de las clases: Con las opciones no es problema, pero
los comandos es necesario reiniciarlos, o reinstanciarlos, antes de su aplicacion para vaciar las
opciones de la ejecución anterior. En el codigo anterior, lo hace en en el __repr__, pero esto es
solo valido para la demostración.
. Tampoco podriar utilizar opciones numéricas ya que 5=Opcion("5") no es válido.
Saludos,
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
_______________________________________________
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