La POO permite organizar el código en entidades que representan cosas del mundo real: alumnos, productos, vehículos, usuarios, etc.
1. ¿Qué es una clase?
Una clase es un molde o plantilla que define:
Atributos (datos)
Métodos (funciones que actúan sobre esos datos)
class Persona:
pass
2. ¿Qué es un objeto?
Un objeto es una instancia de una clase. Si la clase es el molde, el objeto es el producto final.
p = Persona()
3. Constructor: __init__
El método __init__ se ejecuta automáticamente al crear un objeto.
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
p = Persona("Ana", 22)
print(p.nombre, p.edad)
4. Métodos de instancia
Son funciones dentro de la clase que usan self.
class Persona:
def __init__(self, nombre):
self.nombre = nombre
def saludar(self):
return f"Hola, soy {self.nombre}"
p = Persona("Carlos")
print(p.saludar())
5. Atributos públicos y privados (convención)
Python no tiene privacidad estricta, pero se usa:
_atributo→ protegido__atributo→ privado (name mangling)
class Cuenta:
def __init__(self, saldo):
self.__saldo = saldo # privado
def ver_saldo(self):
return self.__saldo
6. Representación del objeto: __str__
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def __str__(self):
return f"{self.nombre} ({self.edad} años)"
p = Persona("Lucía", 30)
print(p)
ACTIVIDAD PRÁCTICA: “Sistema básico de gestión de alumnos”
Objetivo: que tus alumnos creen clases útiles y entiendan cómo instanciar objetos y trabajar con ellos.
Enunciado
Crea una clase Alumno con:
nombre
edad
curso
notas (lista)
Debe incluir:
Un constructor que inicialice los atributos.
Un método
añadir_nota(nota)que agregue una nota.Un método
media()que calcule la media del alumno.Un método
__str__()que muestre la información del alumno.
Después:
Crea 3 alumnos.
Añade varias notas a cada uno.
Muestra su información y su media.
Solución propuesta
class Alumno:
def __init__(self, nombre, edad, curso):
self.nombre = nombre
self.edad = edad
self.curso = curso
self.notas = []
def añadir_nota(self, nota):
self.notas.append(nota)
def media(self):
if not self.notas:
return 0
return sum(self.notas) / len(self.notas)
def __str__(self):
return f"{self.nombre} ({self.edad} años) - Curso: {self.curso}"
# Crear alumnos
a1 = Alumno("Ana", 17, "1º DAM")
a2 = Alumno("Luis", 18, "2º ASIR")
a3 = Alumno("Marta", 16, "1º DAW")
# Añadir notas
a1.añadir_nota(8)
a1.añadir_nota(7)
a2.añadir_nota(9)
a2.añadir_nota(6)
a2.añadir_nota(7)
a3.añadir_nota(5)
a3.añadir_nota(6)
# Mostrar información
alumnos = [a1, a2, a3]
for alumno in alumnos:
print(alumno)
print("Notas:", alumno.notas)
print("Media:", alumno.media())
print()
Ejemplo de salida
Ana (17 años) - Curso: 1º DAM
Notas: [8, 7]
Media: 7.5
Luis (18 años) - Curso: 2º ASIR
Notas: [9, 6, 7]
Media: 7.33
Marta (16 años) - Curso: 1º DAW
Notas: [5, 6]
Media: 5.5