Primero vamos a crear una clase sobre la que trabajar.
class Perro:
'''Clase que representa un perro'''
def __init__(self, nombre, raza, edad):
self.nombre = nombre
self.raza = raza
self.edad = edad
def get_descripcion(self):
print(f"Se llama {self.nombre}, tiene {self.edad} años y es de raza {self.raza}.")
miPerro = Perro("Thor", "Mastín", 7)
miPerro.get_descripcion() # si el método get usa un return tendríamos que poner un print aquí
Se llama Thor, tiene 7 años y es de raza Mastín.
class Perro:
'''Clase que representa un perro'''
def __init__(self, nombre, raza, edad): # no se incluyen las variables que se crean con un valor por defecto
self.nombre = nombre
self.raza = raza
self.edad = edad
self.vacunas = 0 # añadimos una variable con las vacunas por defecto
def get_descripcion(self):
print(f"Se llama {self.nombre}, tiene {self.edad} años y es de raza {self.raza}.")
def read_vacunas(self): # método que informa del nombre del perro y el número de vacunas que tiene
'''Imprime la cantidad de vacunas que tiene puestas el perro'''
print(f"{self.nombre} cuenta actualmente con {self.vacunas} vacunas.")
miPerro = Perro("Thor", "Mastín", 7)
miPerro.get_descripcion()
# Modificando valores de los atributos directamente
miPerro.read_vacunas() # nos informa del número de vacunas antes de vacunarle
miPerro.vacunas=4 # ahora miPerro tendrá asignadas 4 vacunas
miPerro.read_vacunas() # nos informa del número de vacunas después de vacunarle
Se llama Thor, tiene 7 años y es de raza Mastín. Thor cuenta actualmente con 0 vacunas. Thor cuenta actualmente con 4 vacunas.
miPerro.vacunas = 4
class Perro:
'''Clase que representa un perro'''
def __init__(self, nombre, raza, edad): # no se incluyen las variables que se crean con un valor por defecto
self.nombre = nombre
self.raza = raza
self.edad = edad
self.vacunas = 0 # añadimos una variable con las vacunas por defecto
def get_descripcion(self):
print(f"Se llama {self.nombre}, tiene {self.edad} años y es de raza {self.raza}.")
def read_vacunas(self): # método que informa del nombre del perro y el número de vacunas que tiene
'''Imprime la cantidad de vacunas que tiene puestas el perro'''
print(f"{self.nombre} cuenta actualmente con {self.vacunas} vacunas.")
def set_vacunas(self, num_vacunas): # método que actualiza el número de vacunas
'''Actualiza el número de vacunas'''
self.vacunas = num_vacunas # actualiza la variable self.vacunas
miPerro=Perro("Thor","Mastín",7)
miPerro.get_descripcion()
# Modificando valores de atributos mediante métodos
miPerro.set_vacunas(6)
miPerro.read_vacunas()
Se llama Thor, tiene 7 años y es de raza Mastín. Thor cuenta actualmente con 6 vacunas.
Podríamos pensar que no ganamos nada usando métodos para modificar los atributos cuando los podemos modificar de forma directa.
Veamos un ejemplo añadiendo un poco de lógica al método set_vacunas para que ahora no sea posible reducir el número de vacunas.
class Perro:
'''Clase que representa un perro'''
def __init__(self, nombre, raza, edad):
self.nombre = nombre
self.raza = raza
self.edad = edad
self.vacunas = 0
def get_descripcion(self):
print(f"Se llama {self.nombre}, tiene {self.edad} años y es de raza {self.raza}.")
def read_vacunas(self):
'''Imprime la cantidad de vacunas que tiene puestas el perro'''
print(f"{self.nombre} cuenta actualmente con {self.vacunas} vacunas.")
def set_vacunas(self, num_vacunas): # añadimos un poco de lógica al método para evitar reducir vacunas
'''Actualiza el número de vacunas e impide
que puedan reducirse las vacunas ya puestas'''
if num_vacunas >= self.vacunas:
self.vacunas = num_vacunas # si deja actualiza la variable self.vacunas
else: # no deja actualizar las vacunas e imprime un mensaje
print("No es posible reducir el número de vacunas que ya tiene administradas.")
miPerro=Perro("Thor", "Mastín", 7)
miPerro.get_descripcion()
miPerro.set_vacunas(5)
miPerro.read_vacunas()
miPerro.set_vacunas(4)
miPerro.read_vacunas()
Se llama Thor, tiene 7 años y es de raza Mastín. Thor cuenta actualmente con 5 vacunas. No es posible reducir el número de vacunas que ya tiene administradas. Thor cuenta actualmente con 5 vacunas.
Crearemos un método que modifique el atributo que nos indica si el email ha sido enviado.
class Email:
def __init__(self): # método constructor
self.enviado = False # atributo de instancia (inicialmente False)
def enviar_correo(self): # método que establece el atributo como True (parecido a un setter)
self.enviado = True # el atribulo lo establece en True, pero nunca en False
mi_correo = Email()
mi_correo.enviado # consultamos el valor del atributo. Mi correo inicialmente no se ha enviado
False
mi_correo.enviar_correo() # ejecutamos el método de enviar corro que modifica el atributo
mi_correo.enviado # mi correo ha sido enviado
True