[Python-es] Estructura para una tabla?

Chema Cortes chemacortes en wanadoo.es
Mie Mayo 29 12:10:23 CEST 2002


> def cmp_pieza(a,b):
>   if a[1]<b[1]: return -1
>   else: return a[1]>b[1]

Mirando mejor el código, me he dado cuenta que usa una clase llamada Pedido. Es en esta clase donde mejor debería ir la función de comparación:

clase Pedido:
  def __init__(self, nc, pieza, cant, fecha):
    self.nc=nc
    self.pieza=pieza
    self.cant=cant
    self.fecha=fecha
    ...
  def __cmp__(self,p):
    return cmp(self.pieza,p.pieza)

(Aquí he añadido la sugerencia hecha por Marcos)

De este modo, en 'lista_pedidos' no hace falta definir nada más:

class lista_pedidos:
    ...
    def ordena_pieza(self):
          return self.l.sort()

Hay que trabajar un poco más para hacer que se pueda cambiar la columna por la que se ordena. Como sugerencia, se puede partir desde aquí:

class Pedido:
   def __init__(self,nc,pieza,cant,fecha):
      self.pedido={
         "nc":nc, "pieza":pieza, "cant":cant, "fecha":fecha
      }

   def compara(column):
      return lambda a,b,column=column: cmp(a.pedido[column],b.pedido[column])
   compara=staticmethod(compara)

   def __cmp__(self, p):
      compPieza=self.compara("pieza")
      return compPieza(self,p)

class lista_pedido:

   ....
   def ordena_pieza(self):
      compPieza=Pieza.compara("pieza")
      return self.l.sort(compPieza)

   def ordena_fecha(self):
      compFecha=Pieza.compara("fecha")
      return self.l.sort(compFecha)

Aquí se puede ver un ejemplo de "método estático"., novedad para Python 2.2.x   (( sys.version_info >= (2,2) )) Espero no haberme confundido con la indentación: 'compara=staticmethod(compara)' está al mismo nivel de identación que las definiciones de métodos.

Ya se que queda bastante incomprensible. He intentado hacer un codigo lo más genérico posible. Supongo que se puede hacer más legible haciendo explícitas las funciones de comparación por cada campo.

Saludos,
-- 
Chema Cortes (chemacortes en wanadoo.es)
_____________________________________________________________________
No olvides nada. Recuerda los cumpleaños, tus citas, tus cenas románticas y 
todo lo que quieras usando la Agenda personal de Wanadoo.es, desde cualquier 
lugar conectado a Internet. Visítala en http://www.wanadoo.es/agenda






Más información sobre la lista de distribución Python-es