Aprender a pensar como un programador Python

Page 235

19.6 La clase Golfista

209

Si la cola contiene n´ umeros o cadenas simples, se eliminan en orden num´erico o alfab´etico, de mayor a menor. Python puede encontrar el entero o la cadena mayor porque puede compararlos usando los operadores de comparaci´on internos. Si la cola contiene un tipo de objeto, debe proporcionar un m´etodo cmp . Cuando quita usa el operador > para comparar elementos, invoca al cmp de uno de los elementos y le pasa el otro como par´ametro. Siempre que el m´etodo cmp trabaje adecuadamete, la Cola Priorizada funcionar´a.

19.6.

La clase Golfista

Como ejemplo de un objeto con una definici´on inusual de prioridad, vamos a implementar una clase llamada Golfista que mantiene los nombres y puntuaciones de golfistas. Como es habitual, empezamos por definir init y str : class Golfista: def __init__(self, nombre, puntos): self.nombre = nombre self.puntos = puntos def __str__(self): return "%-16s: %d" % (self.nombre, self.puntos) str usa el operador de formato para poner los nombres y las puntuaciones en bonitas columnas. A continuaci´on definimos una versi´on de cmp en la que la puntuaci´on m´as baja tiene la prioridad m´as alta. Como siempre, cmp devuelve 1 si self es “mayor que” otro, -1 si self es “menor que” otro, y 0 si son iguales. class Golfista: ... def __cmp__(self, otro): if self.puntos < otro.puntos: return 1 if self.puntos > otro.puntos: return -1 return 0

# menos es m´ as

Ya estamos listos para probar la cola priorizada con la clase Golfista: >>> tiger = Golfista("Tiger Woods", >>> cabr = Golfista("´ Angel Cabrera", >>> ola = Golfista("J.M. Olaz´ abal", >>>

61) 72) 69)


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.