En Python, todo es un objeto. Las clases son plantillas para crear objetos con atributos y métodos específicos.
# Definición de una clase
class Persona:
pass
# Creación de un objeto
persona1 = Persona()
Atributos y Métodos
Los atributos son características del objeto y los métodos son funciones que definen el comportamiento del objeto.
class Persona:
# Atributos
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
# Método
def saludar(self):
return f"Hola, mi nombre es {self.nombre}."
# Crear un objeto
persona1 = Persona("Juan", 25)
print(persona1.saludar()) # Salida: Hola, mi nombre es Juan.
Constructores
El método __init__ se utiliza como constructor para inicializar atributos.
class Coche:
def __init__(self, marca, modelo):
self.marca = marca
self.modelo = modelo
Herencia
Permite que una clase derive de otra, reutilizando atributos y métodos.
# Clase base
class Animal:
def __init__(self, nombre):
self.nombre = nombre
def hablar(self):
pass
# Clase derivada
class Perro(Animal):
def hablar(self):
return "Guau"
class Gato(Animal):
def hablar(self):
return "Miau"
# Crear instancias
perro = Perro("Fido")
gato = Gato("Whiskers")
print(perro.hablar()) # Salida: Guau
print(gato.hablar()) # Salida: Miau
Sobrescritura de Métodos
Las clases hijas pueden sobrescribir métodos de la clase padre.
Permite usar un método de forma genérica, independientemente de la clase específica.
animales = [Perro("Fido"), Gato("Whiskers"), Pajaro()]
for animal in animales:
print(animal.hablar())
# Salida:
# Guau
# Miau
# Pío Pío
Ejemplos Prácticos
1. Sistema de Vehículos
class Vehiculo:
def __init__(self, tipo):
self.tipo = tipo
def moverse(self):
pass
class Coche(Vehiculo):
def moverse(self):
return "El coche se mueve en carretera."
class Barco(Vehiculo):
def moverse(self):
return "El barco navega en el agua."
vehiculos = [Coche("Coche"), Barco("Barco")]
for vehiculo in vehiculos:
print(vehiculo.moverse())
2. Sistema de Figuras Geométricas
class Figura:
def area(self):
pass
class Rectangulo(Figura):
def __init__(self, ancho, alto):
self.ancho = ancho
self.alto = alto
def area(self):
return self.ancho * self.alto
class Circulo(Figura):
def __init__(self, radio):
self.radio = radio
def area(self):
import math
return math.pi * self.radio ** 2
figuras = [Rectangulo(4, 5), Circulo(3)]
for figura in figuras:
print(figura.area())