Para poder imprimir los objetos Carta de una manera fácil de leer para las personas, vamos a establecer una correspondencia entre los códigos enteros y las palabras. Una manera natural de hacer esto es con listas de cadenas de
caracteres. Asignaremos estas listas dentro de atributos de clase al principio de la definición de clase:
1: class Carta:
2: listaDePalos = ["Tr¶eboles", "Diamantes", "Corazones",
3: "Picas"]
4: listaDeValores = ["nada", "As", "2", "3", "4", "5", "6", "7",
5: "8", "9", "10", "Sota", "Reina", "Rey"]
6: # se omite el m¶etodo init 7: def __str__(self):8: return (self.listaDeValores[self.valor] + " de " +
9: self.listaDePalos[self.palo])Un atributo de clase se define fuera de cualquier metodo, y puede accederse desde cualquiera de los métodos de la clase.
Dentro de str , podemos usar listaDePalos y listaDeValores para asociar los valores numéricos de palo y valor con cadenas de caracteres. Por ejemplo, la expresión self.listaDePalos[self.palo] significa \usa el atributo palo del objeto self como un índice dentro del atributo de clase denominado listaDePalos, y selecciona la cadena apropiada".
El motivo del ``nada" en el primer elemento de listaDeValores es para relleno del elemento de posición cero en la lista, que nunca se usara. Los únicos valores lícitos para el valor van de 1 a 13. No es obligatorio que desperdiciemos este primer elemento. Podr³amos haber comenzado en 0 como es usual, pero es menos confuso si el 2 se codifica como 2, el 3 como 3, y así sucesivamente.
Con los métodos que tenemos hasta ahora, podemos crear e imprimir naipes:
1: >>> carta1 = Carta(1, 11) 2: >>> print carta1 3: Sota de DiamantesLos atributos de clase como listaDePalos son compartidos por todos los objetos de tipo Carta. La ventaja de esto es que podemos usar cualquier objeto Carta para acceder a los atributos de clase:
1: >>> carta2 = Carta(1, 3) 2: >>> print carta2 3: 3 de Diamantes 4: >>> print carta2.listaDePalos[1] 5: DiamantesLa desventaja es que si modificamos un atributo de clase, afectaremos a cada instancia de la clase. Por ejemplo, si decidimos que “Sota de Diamantes" en realidad debería llamarse” Sota de Ballenas Bailarinas", podríamos hacer lo siguiente:
1: >>> carta1.listaDePalos[1] = "Ballenas Bailarinas"
2: >>> print carta1 3: Sota de Ballenas Bailarinas 1: >>> print carta2 2: 3 de Ballenas Bailarinas
Comentarios
Publicar un comentario