Curso de introducción a la programación con Python¶

    Autor: Luis Fernando Apáez Álvarez
    -Curso PyM-
    Clase 2: Clases y objetos (Parte II)
    Fecha: 01 de diciembre del 2022


Contenido¶

  • Parámetros en los métodos
  • Método __init__

Parámetros en los métodos ¶

Primero recordemos la clase Persona que creamos la sesión pasada:

In [ ]:
# Creamos la clase Persona 

class Persona():
    
    # De manera simple podemos agregar estos atributos
    
    ojos = 2
    brazos = 2
    piernas = 2
    nariz = 1
    hablando = False
    corriendo = False
    
    # Después los siguientes métodos
    
    def hablar(self):
        self.hablando = True
    
    def correr(self):
        self.corriendo = True  

Ahora, dentro del método hablar() podemos agregar más parámetros además del parámetro self, pues recordemos que un método no es más que una función dentro de una clase. Por ejemplo, podemos agregar lo siguiente a dicho método

In [1]:
# Creamos la clase Persona 

class Persona():
    
    # De manera simple podemos agregar estos atributos
    
    ojos = 2
    brazos = 2
    piernas = 2
    nariz = 1
    hablando = False
    corriendo = False
    
    # Después los siguientes métodos
    
    # agregamos un parámetro
    def hablar(self, msj):
        self.hablando = True
        mensaje = msj
        
        if self.hablando:
            print(mensaje)
    
    def correr(self):
        self.corriendo = True  

de tal manera, una vez que instanciamos la clase persona (i.e. creamos un objeto de dicha clase) y llamamos al método hablar() pasándole un parámetro, entonces dicho método nos mostrará en pantalla el mensaje que pasamos por parámetro. Veamos

In [3]:
# creamos un objeto

Luis = Persona()

# llamamos al método hablar()

Luis.hablar('Hola, te estoy saludando')
Hola, te estoy saludando

Método __init__ ¶

Por otro lado, a las primeras líneas de código dentro de nuestra clase hacen referencia a características comunes que tendrán (por defecto) nuestros objetos

# De manera simple podemos agregar estos atributos

    ojos = 2
    brazos = 2
    piernas = 2
    nariz = 1
    hablando = False
    corriendo = False

y que se conoce como estado inicial, el cual es ejecutado inmediatamente después de instanciar la clase.

A dicho estado inicial lo especificaremos mediante un constructor (define la forma en que se crean los objetos). En otras palabras, el constructor es un método especial que le da un estado inicial a los objetos. Ahora bien, trabajando con nuestro ejemplo podemos adaptar el código anterior para crear un método constructor, para ello utilizaremos la sintaxis básica

def __init__(self):

que indica justamente que estamos creando un método constructor. Así, podemos adaptar el código de nuestro ejemplo como sigue

# Creamos el constructor 

      def __init__(self):
        self.ojos = 2
        self.brazos = 2
        self.piernas = 2
        self.nariz = 1
        self.hablando = False
        self.corriendo = False

Más aún, como ya vimos en la parte inicial de esta sesión podemos colocar parámetros a los métodos. Por ello podemos agregar como un atributo inicial a la clase Persona el nombre que pueda llegar a tomar cada objeto de dicha clase, entre otras cosas más:

In [1]:
# Creamos la clase Persona 

class Persona():
    
    # Creamos el constructor (método inicializador)
    
    def __init__(self, nombre):
        self.nombre = nombre
        self.ojos = 2
        self.brazos = 2
        self.piernas = 2
        self.nariz = 1
        self.hablando = False
        self.corriendo = False
    
    # Después los siguientes métodos
    
    # agregamos un parámetro
    def hablar(self, msj):
        self.hablando = True
        mensaje = msj
        
        if self.hablando:
            print(mensaje)
    
    def correr(self):
        self.corriendo = True 

Observemos el código self.nombre = nombre en el cual self.nombre hace referencia a un atributo y nombre a la derecha del símbolo = hace alusión al parámetro del método. Luego, para instanciar una clase deberemos dar un valor correspondiente al parámetro del constructor, por ejemplo

In [2]:
# Creamos un objeto de la clase Persona

persona1 = Persona('Luis')

# accedamos al atributo self.nombre

print(persona1.nombre)
Luis

Finalmente creemos otro objeto:

In [10]:
Eva = Persona('Eva')

print(Eva.nombre)

# accedemos a un atributo

print(Eva.hablando)

# invocamos el método hablar

Eva.hablar(f'Hola, mi nombre es {Eva.nombre}')

print(Eva.hablando)
Eva
False
Hola, mi nombre es Eva
True