0

I'm trying to create a class with @property, but i keep getting an recursion error and don't know why.

class residente:
    def __init__(self, name, age, program):
        self.name = name
        self.age = age
        self.program = program
        print(self.name, "is a student living in City", self.age, "years old", "and studying a", self.program, ".")
    @property
    def name(self):
        return self.name
    @name.setter
    def name(self, name):
        self.name = name
    @name.deleter
    def name(self):
        del self.name
        
    @property
    def age(self):
        return self.age
    @age.setter
    def age(self, age):
        self.age = age   
    @age.deleter
    def age(self):
        del self.age
        
    @property
    def program(self):
        return self.program
    @program.setter
    def program(self, program):
        self.program = program
    @program.deleter
    def program(self):
        del self.program

        
Bernardo = residente("Bernardo", "23", "Medicine in English")

I keep getting the following error

Output:

Leonardo
  • 2,439
  • 33
  • 17
  • 31
BCCL98
  • 11
  • 2
  • 2
    Does this answer your question? [Using Properties in Python classes cause "maximum recursion depth exceeded"](https://stackoverflow.com/questions/36931415/using-properties-in-python-classes-cause-maximum-recursion-depth-exceeded) – Brian61354270 Mar 06 '22 at 17:06

1 Answers1

0

Reusing name, age, and program variables result in the setters calling themselves.

class residents:
    # self.name = name
    # self.age = age
    # self.program = program
    # 
    # results in the setter calling itself
    # 
    # Changed to 
    #         self._name = name
    #         self._age = age
    #         self._program = program

    def __init__(self, name, age, program):
        self._name = name
        self._age = age
        self._program = program
        print(self.name, "is a student living in City", self.age, "years old",
              "and studying a", self.program, ".")


    @property
    def name(self):
        return self._name


    @name.setter
    def name(self, name):
        self.name = _name


    @name.deleter
    def name(self):
        del self._name


    @property
    def age(self):
        return self._age


    @age.setter
    def age(self, age):
        self.age = _age


    @age.deleter
    def age(self):
        del self._age


    @property
    def program(self):
        return self._program


    @program.setter
    def program(self, program):
        self.program = program


    @program.deleter
    def program(self):
        del self.program

Bernardo = residente("Bernardo", "23", "Medicine in English")

Result:

Bernardo is a student living in City 23 years old and studying a Medicine in English .
Carl_M
  • 861
  • 1
  • 7
  • 14