hola buenas, tengo el siguiente ejercicio, es un problema basico de poo, en este se me pide que haga uso de getters y setters, el problema está aquí, en el momento que intento cambiar el valor de uno de los atributos de un objeto (entrar en el setter) me salta el “name error” y no entiendo el porque ya que me sale el “self is not defined” cuando en todo momento lo he ido escribiendo
adjunto el ejercicio:
class Alumno():
“”" Clase Alumno
Con esta clase nos permite saber el nombre del alumno y su respectiva nota"“”
def __init__(self, nombre=None, nota=None): # constructor de clase, dejamos los atributos vacíos
self.__nombre = nombre # en este ejercicio, le ponemos el doble guión para permitir "privar" el atributo
self.__nota = nota
print("El alumno {} se ha creado con éxito".format(nombre)) # informa que el alumno se ha creado con éxito
@property
def nombre(self):
print("Dentro del GETTER 1")
return self.__nombre
@nombre.setter
def nombre(Self,nuevoNombre):
print("Dentro del SETTER 1")
self.__nombre = nuevoNombre
@property
def nota(self):
print("Dentro del GETTER 2")
return self.__nota
@nota.setter
def nota(Self,nuevaNota):
print("Dentro del SETTER 2")
self.__nota = nuevaNota
def calificacion(self): # a partir de la nota, indica aprobado o suspenso (notas sobre 10)
if self.nota >= 5:
print("{} ha aprobado, ya que tiene un {}".format(self.nombre,self.nota))
else:
print("{} ha suspendido, ya que tiene un {}".format(self.nombre,self.nota))
def __str__(self):
return "El alumno {} tiene una nota de {}".format(self.nombre,self.nota) # permite ver la información (Atributos) del alumno
experimentación
creación de alumnos
a1 = Alumno(nombre=“Ana”, nota=7)
a2 = Alumno(nombre=“Carlos”, nota=3)
a3 = Alumno(nombre=“Lucía”, nota=9)
acceso a las clases mediante el uso de getter
print(a1.nombre)
print(a2.nombre)
print(a3.nota)
canvio de variable de los atributos mediante setter
a2.nombre = “David”
print(a2)
a3.nota = 5
print(a3)
ahora, una vez ejecutado me sale lo siguiente:
El alumno Ana se ha creado con éxito
El alumno Carlos se ha creado con éxito
El alumno Lucía se ha creado con éxito
Dentro del GETTER 1
Ana
Dentro del GETTER 1
Carlos
Dentro del GETTER 2
9
Dentro del SETTER 1
NameError Traceback (most recent call last)
Cell In[1], line 56
53 print(a3.nota)
55 # canvio de variable de los atributos mediante setter
—> 56 a2.nombre = “David”
57 print(a2)
58 a3.nota = 5
Cell In[1], line 20, in Alumno.nombre(Self, nuevoNombre)
17 @nombre.setter
18 def nombre(Self,nuevoNombre):
19 print(“Dentro del SETTER 1”)
—> 20 self.__nombre = nuevoNombre
NameError: name ‘self’ is not defined
el error sale cuando entro en el setter pero no entiendo el por que