Recursión infinita en el setter python3.3

¿Alguien puede decirme por qué hay una recursión en el siguiente código?

class A: def __init__(self): self.a = 0 @property def a(self): print ("called a getter") return self.a @a.setter def a(self, value): print ("called a setter") self.a = value class B(A): def check(self): a = 10 if __name__ == "__main__": bb = B() bb.check() 

Tengo que llamar a un establecedor de clase base de clase infantil. No se me permite acceder al miembro directamente. ¿Alguien puede decirme cómo hacerlo de otra manera?

 @a.setter def a(self, value): print ("called a setter") self.a = value 

Cuando self.a = value ejecuta, vuelve a llamar a su método a(self, value) , que ejecuta self.a = value nuevo, lo que llama a(self, value) … etc.

La solución convencional es tener diferentes nombres para la propiedad y el atributo subyacente. Ex. Puedes agregar un guión bajo al frente.

 class A: def __init__(self): self._a = 0 @property def a(self): print ("called a getter") return self._a @a.setter def a(self, value): print ("called a setter") self._a = value