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())  # Guau

Ejercicio 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 = departamento

Ejemplo de uso

gerente = Gerente("Carlos", 5000, "Ventas")
print(gerente.nombre)       # Carlos
print(gerente.departamento) # Ventas

Ejercicio 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 ** 2

Ejemplo 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 += 1

Ejemplo de uso

vehiculo1 = Vehiculo()
vehiculo2 = Vehiculo()
print(Vehiculo.contador)  # 2

Ejercicio 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.altura

Ejemplo de uso

rectangulo = Rectangulo(5, 3)
print(rectangulo.area)  # 15

Ejercicio 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 ** 2

Ejemplo 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 -= cantidad

Ejemplo de uso

cuenta = CuentaBancaria(100)
try:
    cuenta.retirar(200)
except SaldoInsuficienteError as e:
    print(e)  # Fondos insuficientes

Ejercicio 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: int

Ejemplo de uso

producto = Producto("Camiseta", 20.5, 100)
print(producto)  # Producto(nombre='Camiseta', precio=20.5, cantidad=100)