Atributos obligatorios - Curso desde cero Programación Orientada a Objetos Python - Capítulo 4

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)).

Los atributos obligatorios y opcionales en Python

Código Python

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)

terminal Resultado en la consola terminal

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.

Código Python

print(alumno001.materias)

terminal Resultado en la consola terminal

[]

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:

Código Python

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)

terminal Resultado en la consola terminal

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:

Código Python

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)

terminal Resultado en la consola terminal

['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 rremove(). 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().


Suscríbete a mi canal de YouTube para apoyarme

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.


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.