Métodos

A estas alturas ya no debe sorprendernos demasiado la creación de métodos, pues hemos visto dos ya: el método __init__ y, en el ejemplo anterior, el método area. Básicamente, los métodos de una clase se crean como cualquier otra función, sin olvidar que el primer parámetro deberá ser siempre self.

Vamos a hacer un ejemplo en el que combinemos lo visto hasta ahora. Vamos a implementar un codificador César (¿recuerdas cuando de niño jugabas a cifrar mensajes sustituyendo cada letra por otra resultado de añadir a la primera un número de posiciones en el alfabeto?):

  • La clase (que define el codificador/decodificador) deberá tener asociada una clave que no es más que el número de posiciones en el alfabeto que hay que añadir a una letra para cifrarla. En nuestro ejemplo aceptaremos tanto números enteros positivos como negativos.
  • La clase deberá también trabajar con un conjunto de letras limitado (en nuestro ejemplo), de forma que si una letra recibe un índice excesivamente alto o excesivamente bajo, se consideren las letras del otro extremo en círculo. Es decir, si el alfabeto considerado fuese aeiou y estuviésemos cifrando la letra "o" con la clave "2", tendríamos que sumar a "o" dos posiciones: una sería la correspondiente a la letra "u" y la segunda sería la correspondiente a la letra "a". Dicho con otras palabras, el índice a recibir será el índice de la letra a cifrar más la clave, módulo la longitud del alfabeto: nuevo_indice = (indice + clave) % len(alfabeto).
  • Necesitaremos un método para cifrar un texto y otro para descifrar un texto.

Comencemos:

La clave se definirá al instanciar la clase, pasándose al constructor vía argumentos:

class CifradorCesar:
    
    def __init__(self, clave):
        self.clave = clave

Probemos esta clase creando un objeto a partir de ella y accediendo al atributo clave creado:

c = CifradorCesar(7)

c.clave

7