Curso de POO en Python desde cero

Los atributos obligatorios y opcionales en Python

Capítulo 4: Atributos obligatorios y opcionales - POO Python

En este capítulo, te voy a mostrar lo que son los atributos obligatorios y opcionales de las clases de Python. Como siempre, con ejemplos prácticos para que entiendas mejor la lección.

Vamos a cambiar de tema en los ejemplos. Hoy tengo creada la clase Alumnos. Dicha clase contiene tres atributos obligatorios en el método __init__ y otro que contiene por defecto una lista, pero que no es un atributo obligatorio (ya que no se pasa como argumento en los paréntesis del __init__ (atributo materias)).

class Alumnos:
	def __init__(self, nombre, apellidos, curso):
		self.nombre = nombre
		self.apellidos = apellidos
		self.curso = curso
		self.materias = []


alumno001 = Alumnos('Lucía', 'Granados Acedo', '2')

print(alumno001.nombre, alumno001.apellidos)
Lucía Granados Acedo

Si consultamos el nombre y los apellidos o el curso, nos dará un valor, pero si consultamos la lista de materias del objeto, a la cual no hemos especificado nada en el momento de la instanciación, vemos que devuelve una lista vacía, lo que demuestra de forma irrefutable, que el __init__, da siempre un estado inicial con todo lo que contiene. Puede ser que no utilicemos nunca esta lista, pero igualmente, el objeto la lleva siempre con él.

print(alumno001.materias)
[]

Probemos de crear otro alumno, esta vez incluyendo algo en la lista.
Es aquí donde encuentras un problema. Al no ser obligatorio el atributo materias, si lo especificas en los paréntesis de la instanciación no te va a dejar, porque estamos especificando un atributo más de los que se esperaban en la creación de objetos de la clase Alumnos.

Por lo que si quiero poder utilizar la lista en el momento de la creación del objeto, tengo dos formas de hacerlo. La primera es incluir materias en los argumentos obligatorios del __init__ y obligatoriamente, tener que especificar algún valor para esa lista:

class Alumnos:
	def __init__(self, nombre, apellidos, curso, materias):
		self.nombre = nombre
		self.apellidos = apellidos
		self.curso = curso
		self.materias = materias


alumno001 = Alumnos('Lucía', 'Granados Acedo', '2', ['Física'])

print(alumno001.nombre, alumno001.apellidos, alumno001.materias)

alumno002 = Alumnos('Javier', 'Morales García', '4', ['Matemáticas', 'Inglés'])

print(alumno002.nombre, alumno002.apellidos, alumno002.materias)
Lucía Granados Acedo ['Física']
Javier Morales García ['Matemáticas', 'Inglés']

La segunda forma de hacer esto, es instanciar el objeto sin especificar nada en materias y utilizamos por ejemplo un append para ir añadiendo materias a la lista en el momento que queramos:

class Alumnos:
	def __init__(self, nombre, apellidos, curso):
		self.nombre = nombre
		self.apellidos = apellidos
		self.curso = curso
		self.materias = []


alumno001 = Alumnos('Lucía', 'Granados Acedo', '2')

alumno002 = Alumnos('Javier', 'Morales García', '4')

alumno001.materias.append('Matemáticas')

print(alumno001.materias)

alumno002.materias.append('Inglés')

print(alumno002.materias)
['Matemáticas'] ['Inglés']

Recuerda que no solo tienes append para insertar elementos en una lista ya creada. Tienes insert(), pop(),etc.
También puedes eliminar materias después de ser almacenadas con remove(). Por ejemplo, las normas de modificación de listas son las mismas, solo tienes que llamar al objeto, seguido de un punto, atributo que contenga la lista y el método a utilizar, así de sencillo.
En el vídeo puedes ver un ejemplo utilizando remove().

Comentarios

Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.