Programación Orientada a Objetos en Python
La Programación Orientada a Objetos (POO) es una de las paradigmas más importantes en la programación moderna. Python soporta POO a nivel completo, lo que lo convierte en una herramienta poderosa tanto para desarrolladores principiantes como para programadores profesionales.
La POO ayuda a modelar el mundo real, mejora la legibilidad del código, permite reutilizar componentes y gestionar la complejidad de los proyectos. Los conceptos clave de la programación orientada a objetos son las clases y los objetos, junto con los principios fundamentales: herencia, encapsulación y polimorfismo.
Este enfoque permite estructurar un programa como un conjunto de objetos que interactúan entre sí, donde cada objeto es una instancia de una clase específica. Esto hace que el código sea más modular, comprensible y fácil de mantener.
Fundamentos de Clases y Objetos en Python
Definición de Clase y Objeto
Una clase es una plantilla o modelo para crear objetos. Define la estructura de datos y los métodos que estarán disponibles para todos los objetos de ese tipo.
Un objeto es una instancia concreta de una clase, que posee sus propios datos y puede ejecutar las acciones definidas en la clase.
class Coche:
def conducir(self):
print("El coche está en marcha")
mi_coche = Coche() # objeto (instancia de la clase)
mi_coche.conducir()
En el código anterior, la clase Coche define la plantilla para crear objetos de tipo coche. El método conducir() describe el comportamiento disponible para todas las instancias de esta clase.
Estructura de una Clase en Python
La estructura básica de una clase en Python es la siguiente:
class NombreClase:
def __init__(self, argumentos):
self.propiedades = valores
def metodo(self):
acciones
Los componentes importantes de una clase incluyen:
- init — el constructor de la clase, que se llama automáticamente al crear un nuevo objeto
- self — un parámetro especial que representa una referencia a la instancia actual del objeto
- Atributos — variables que almacenan los datos del objeto
- Métodos — funciones definidas dentro de la clase y asociadas al objeto
Creación y Uso de Clases
Ejemplo Práctico de Creación de una Clase
Veamos la creación de una clase Persona que modela a una persona:
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def saludar(self):
print(f"Hola, me llamo {self.nombre}")
def obtener_info(self):
return f"Nombre: {self.nombre}, Edad: {self.edad}"
p = Persona("Ana", 30)
p.saludar()
print(p.obtener_info())
En este ejemplo, el constructor init recibe los parámetros nombre y edad, que se guardan como atributos de la instancia. Los métodos saludar() y obtener_info() proporcionan funcionalidad para trabajar con los datos del objeto.
Creación de Instancias de una Clase
El proceso de crear una instancia de una clase en Python se realiza llamando a la clase como si fuera una función:
p1 = Persona("Juan", 25)
p2 = Persona("María", 28)
print(p1.nombre) # Juan
print(p1.edad) # 25
print(p2.nombre) # María
Cada llamada al constructor de la clase crea un nuevo objeto independiente con sus propios atributos y estado.
Atributos en Clases de Python
Atributos de Instancia
Los atributos de instancia son únicos para cada objeto. Se crean e inicializan en el método init y pueden modificarse durante la ejecución del programa:
class Estudiante:
def __init__(self, nombre, nota):
self.nombre = nombre
self.nota = nota
def actualizar_nota(self, nueva_nota):