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("Carlos", 5000, "Ventas")
gerente 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:
= 0
contador
def __init__(self):
+= 1 Vehiculo.contador
Ejemplo de uso
= Vehiculo()
vehiculo1 = Vehiculo()
vehiculo2 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
= Vector(1, 2)
v1 = Vector(3, 4)
v2 = v1 + v2
v3 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(5, 3)
rectangulo 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(4)
circulo 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
= CuentaBancaria(100)
cuenta try:
200)
cuenta.retirar(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("Python Avanzado", "Juan Pérez")
libro 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:
str
nombre: float
precio: int cantidad:
Ejemplo de uso
= Producto("Camiseta", 20.5, 100)
producto print(producto) # Producto(nombre='Camiseta', precio=20.5, cantidad=100)