Programación Orientada a Objetos en Python
Objetivo
Comprender y aplicar los conceptos básicos de la programación orientada a objetos (POO) en Python mediante ejemplos progresivos.
Conceptos clave
- Clase
- Plantilla para crear objetos.
- Objeto
- Instancia de una clase.
- Atributo
- Variable asociada a un objeto.
- Método
- Función definida dentro de una clase.
- Encapsulación
- Agrupar datos y comportamientos en una clase.
Esta lección introduce los fundamentos de la POO de forma progresiva. Es importante que el alumno practique creando sus propias clases para consolidar el aprendizaje.
Ejemplo 1 – Clase básica
class Persona:
def saludar(self):
print("Hola, soy una persona")
p1 = Persona()
p1.saludar()
Preguntas
- ¿Cómo se llama la clase definida?
- ¿Qué tipo de elemento es
saludar? - ¿Qué hace el método
saludar? - ¿Qué significa
self? - ¿Qué se crea con
p1 = Persona()? - ¿Qué ocurre al ejecutar
p1.saludar()? - ¿Cuántos objetos se crean en este código?
- ¿Se puede crear otro objeto de la misma clase? ¿Cómo?
Ejemplo 2 – Atributos
class Persona:
def __init__(self, nombre):
self.nombre = nombre
def saludar(self):
print("Hola, soy", self.nombre)
p1 = Persona("Irving")
p1.saludar()
Preguntas
- ¿Qué método especial se utiliza para inicializar el objeto?
- ¿Qué valor recibe
nombreal crearp1? - ¿Dónde se almacena el atributo
nombre? - ¿Qué imprime el programa?
- ¿Qué pasaría si se crea
p2 = Persona("Ana")? - ¿Cuál es la diferencia con el ejemplo anterior?
- ¿Qué representa
self.nombre? - ¿Se pueden agregar más atributos? ¿Cómo?
Ejemplo 3 – Múltiples atributos y métodos
class Coche:
def __init__(self, marca, velocidad):
self.marca = marca
self.velocidad = velocidad
def acelerar(self):
self.velocidad += 10
def mostrar(self):
print(self.marca, "va a", self.velocidad, "km/h")
c1 = Coche("Toyota", 50)
c1.acelerar()
c1.mostrar()
Preguntas
- ¿Cuántos atributos tiene la clase?
- ¿Qué hace el método
acelerar? - ¿Qué valor tendrá
velocidaddespués de acelerar? - ¿Qué imprime
mostrar? - ¿Qué tipo de dato es
velocidad? - ¿Qué ocurre si se llama dos veces a
acelerar? - ¿Cómo crearías otro coche diferente?
- ¿Qué pasaría si no se llama a
acelerar?
Ejemplo 4 – Encapsulación simple
class Cuenta:
def __init__(self, saldo):
self.__saldo = saldo
def depositar(self, cantidad):
self.__saldo += cantidad
def mostrar_saldo(self):
print("Saldo:", self.__saldo)
c = Cuenta(1000)
c.depositar(500)
c.mostrar_saldo()
Preguntas
- ¿Qué significa que
__saldotenga doble guion bajo? - ¿Se puede acceder directamente a
__saldodesde fuera? - ¿Qué hace el método
depositar? - ¿Cuál es el saldo final?
- ¿Qué método permite ver el saldo?
- ¿Qué concepto de POO se aplica aquí?
- ¿Qué pasaría si intentas imprimir
c.__saldo? - ¿Cómo podrías retirar dinero (nuevo método)?
Ejemplo 5 – Herencia
class Animal:
def hablar(self):
print("El animal hace un sonido")
class Perro(Animal):
def hablar(self):
print("El perro ladra")
a = Animal()
p = Perro()
a.hablar()
p.hablar()
Preguntas
- ¿Qué clase es la clase base?
- ¿Qué clase hereda de otra?
- ¿Qué significa
Perro(Animal)? - ¿Qué hace el método
hablaren cada clase? - ¿Qué imprime
a.hablar()? - ¿Qué imprime
p.hablar()? - ¿Qué concepto se aplica cuando
Perroredefine el método? - ¿Se pueden crear más clases que hereden de
Animal?
Repaso de conceptos fundamentales de la lección
1. Clase
Una clase es un molde o plantilla.
Sirve para definir cómo serán ciertos objetos: qué datos tendrán y qué acciones podrán realizar.
Por ejemplo:
- una clase
Personapuede tener un nombre, - una clase
Cochepuede tener una marca y una velocidad, - una clase
Alumnopuede tener nombre y calificación.
La clase no es el objeto en sí, sino la estructura que indica cómo construirlo.
Piensa en una clase como el plano de una casa. El plano no es la casa real, pero indica cómo debe construirse.
2. Objeto
Un objeto es una instancia de una clase.
Es decir, cuando ya se crea algo real a partir del molde.
Ejemplo conceptual:
- La clase es
Alumno - Un objeto puede ser un alumno específico con nombre
"Luis"y calificación8
Entonces:
Alumnoes la plantilla"Luis"con calificación8es un objeto concreto
3. Método
Un método es una función que pertenece a una clase.
Sirve para definir acciones o comportamientos de los objetos.
Ejemplos de métodos:
saludar()acelerar()mostrar()depositar()
Un método trabaja normalmente con los datos del propio objeto.
4. Atributo
Un atributo es una variable asociada a un objeto.
Representa características o información del objeto.
Ejemplos:
- nombre
- calificación
- marca
- velocidad
- saldo
- precio
- cantidad
Si se tiene una clase Producto, algunos atributos podrían ser:
nombrepreciocantidad
5. self
self representa al objeto actual.
Se usa dentro de los métodos para acceder a sus propios atributos y métodos.
Por ejemplo, cuando se escribe:
self.nombre
se está diciendo: “usa el atributo nombre del objeto actual”.
Sin self, Python no sabría a qué objeto pertenece ese dato.
self no es una palabra reservada obligatoria por nombre, pero en Python se usa siempre así por convención y claridad.
6. Método __init__
El método __init__ es un método especial que se ejecuta automáticamente cuando se crea un objeto.
Sirve para inicializar los atributos.
Por ejemplo, cuando se crea un alumno, en __init__ se pueden asignar:
- su nombre,
- su calificación.
Entonces, al momento de construir el objeto, ya queda con sus datos guardados.
7. Encapsulación
La encapsulación consiste en proteger o controlar el acceso a ciertos atributos.
En Python, una forma básica de indicar que un atributo no debe usarse directamente desde fuera de la clase es escribirlo con doble guion bajo:
__saldo
Esto no significa que sea imposible acceder, sino que Python lo protege de forma básica para fomentar el uso correcto.
La idea es que ciertos datos se modifiquen solo mediante métodos controlados, por ejemplo:
- depositar dinero,
- retirar dinero,
- mostrar saldo.
Así se evita que alguien cambie el saldo arbitrariamente sin reglas.
8. Herencia
La herencia permite crear una clase nueva a partir de otra clase existente.
La nueva clase hereda atributos y métodos de la clase base.
Ejemplo:
Animalpuede ser la clase generalPerropuede heredar deAnimal
Esto evita repetir código y permite especializar comportamientos.
9. Sobrescritura de métodos
La sobrescritura ocurre cuando una clase hija redefine un método que ya existía en la clase padre.
Por ejemplo:
Animaltiene el métodohablar()Perrotambién tienehablar(), pero con un comportamiento distinto
Así, cada objeto responde según su propia clase.