Ejercicios Python - Nivel Intermedio (POO) - Parte 2
Ejercicio 6
Implementa una clase base Animal con un método hablar. Crea una subclase Perro que sobrescriba este método.
Solución
class Animal:
def hablar(self):
raise NotImplementedError("Este método debe ser implementado por la subclase.")
class Perro(Animal):
def hablar(self):
return "Guau"Ejemplo de uso
perro = Perro()
print(perro.hablar()) # GuauEjercicio 7
Crea una clase Empleado y una subclase Gerente que utilice super() para llamar al constructor de la clase base.
Solución
class Empleado:
def __init__(self, nombre, salario):
self.nombre = nombre
self.salario = salario
class Gerente(Empleado):
def init(self, nombre, salario, departamento):
super().init(nombre, salario)
self.departamento = departamentoEjemplo de uso
gerente = Gerente("Carlos", 5000, "Ventas")
print(gerente.nombre) # Carlos
print(gerente.departamento) # VentasEjercicio 8
Crea una clase Matematica con un método estático que calcule el área de un círculo dado el radio.
Solución
import math
class Matematica:
@staticmethod # Método estático, no recibe una instancias como argumento
def area_circulo(radio):
return math.pi * radio ** 2Ejemplo de uso
print(Matematica.area_circulo(5)) # 78.5398...Ejercicio 9
Implementa una clase Vehiculo con un contador de instancias.
Solución
class Vehiculo:
contador = 0
def __init__(self):
Vehiculo.contador += 1Ejemplo de uso
vehiculo1 = Vehiculo()
vehiculo2 = Vehiculo()
print(Vehiculo.contador) # 2Ejercicio 10
Crea una clase Vector que permita sumar dos vectores usando el operador +.
Solución
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, otro):
return Vector(self.x + otro.x, self.y + otro.y)
def __str__(self):
return f"({self.x}, {self.y})"Ejemplo de uso
v1 = Vector(1, 2)
v2 = Vector(3, 4)
v3 = v1 + v2
print(v3) # (4, 6)Ejercicio 11
Crea una clase Rectangulo que calcule su área como una propiedad.
Solución
class Rectangulo:
def __init__(self, base, altura):
self.base = base
self.altura = altura
@property # Propiedad, las propiedades no se llaman como métodos
def area(self):
return self.base * self.alturaEjemplo de uso
rectangulo = Rectangulo(5, 3)
print(rectangulo.area) # 15Ejercicio 12
Crea una clase abstracta Figura con un método area que deba implementarse en las subclases.
Solución
from abc import ABC, abstractmethod
class Figura(ABC):
@abstractmethod # Método abstracto, las subclases deben implementarlo
def area(self):
pass
class Circulo(Figura):
def __init__(self, radio):
self.radio = radio
def area(self):
return 3.1416 * self.radio ** 2Ejemplo de uso
circulo = Circulo(4)
print(circulo.area()) # 50.2656...Ejercicio 13
Crea una excepción personalizada llamada SaldoInsuficienteError para una clase de cuenta bancaria.
Solución
class SaldoInsuficienteError(Exception):
pass
class CuentaBancaria:
def init(self, saldo_inicial=0):
self.saldo = saldo_inicial
def retirar(self, cantidad):
if cantidad > self.saldo:
raise SaldoInsuficienteError("Fondos insuficientes")
self.saldo -= cantidadEjemplo de uso
cuenta = CuentaBancaria(100)
try:
cuenta.retirar(200)
except SaldoInsuficienteError as e:
print(e) # Fondos insuficientesEjercicio 14
Crea una clase Libro que implemente estos métodos para mostrar información de manera clara.
Solución
class Libro:
def __init__(self, titulo, autor):
self.titulo = titulo self.autor = autor
def __str__(self):
return f"Libro: {self.titulo} por {self.autor}"
def __repr__(self):
return f"Libro({self.titulo!r}, {self.autor!r})"Ejemplo de uso
libro = Libro("Python Avanzado", "Juan Pérez")
print(str(libro)) # Libro: Python Avanzado por Juan Pérez
print(repr(libro)) # Libro('Python Avanzado', 'Juan Pérez')Ejercicio 15
Implementa una clase Producto usando @dataclass.
Solución
from dataclasses import dataclass
@dataclass # Decorador para crear clases de datos
class Producto:
nombre: str
precio: float
cantidad: intEjemplo de uso
producto = Producto("Camiseta", 20.5, 100)
print(producto) # Producto(nombre='Camiseta', precio=20.5, cantidad=100)