"Name error" en ejercicio de programacion orientada a objetos

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

Hola.

Todavía no he llegado aquí en mis estudios pero lo que veo es que en los Setters tienes el self de la definición con la primera letra en mayúsculas (Self).

No sé si será eso pero en todo el resto del código tienes self en minúsculas.

Espero que sea de ayuda.

Un saludo.