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

Código

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)

Resultado

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

Código

print(alumno001.materias)

Resultado

[]

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

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)

Resultado

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

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)

Resultado

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


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.