Name Mangling In Python Regarding Setter methods

35 Views Asked by At

I had an issue with my setter methods not working when the if conditions were met, and I was not sure why (I ended up fixing it, but my question is WHY this fixed it). Here is my code:

class Employee:
    def __init__(self, name, employee_id):
        self.__name = name
        self.__employee_id = employee_id 

    #Set property for name
    @property
    def name(self):
        return self.__name.capitalize()
    
    #Set setter for name
    @name.setter
    def name(self, name):
        if name.isalpha():
            self.__name = name.capitalize()
        else:
            self.__name = 'Unknown'
           

    #Set property for employeeid
    @property
    def employee_id(self):
        return f"{self.__employee_id:0>4}"

    #Set setter for employeeid
    @employee_id.setter
    def employee_id(self, employee_id):
        if len(employee_id) == 0:
            self.__employee_id = '9999'
        else:
            self.__employee_id = employee_id
          

    #Str format to print out name 
    def __str__(self):
        return f"<{self.employee_id}>: {self.name}"

What I did to fix my issue was remove the __ from name and employee_id ONLY in the init method, and the if conditions in my setters worked (printed out "<9999>: Unknown", when it kept printing out "<0000>: " before). Can anyone explain to me why this worked?

Thank you!

0

There are 0 best solutions below