Build a Salary Tracker - Step 31

Tell us what’s happening:

Your if statement should use hasattr(self, ‘_level’) to check if _level exists before comparing.

Your code so far

class Employee:
    _base_salaries = {
        'trainee': 1000,
        'junior': 2000,
        'mid-level': 3000,
        'senior': 4000,
    }

    def __init__(self, name, level):
        self.name = name
        self.level = level
        self._salary = Employee._base_salaries[level]

    def __str__(self):
        return f'{self.name}: {self.level}'

    def __repr__(self):
        return f"Employee('{self.name}', '{self.level}')"

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

    @name.setter
    def name(self, new_name):
        if not isinstance(new_name, str):
            raise TypeError("'name' must be a string.")
        self._name = new_name
        # print(f"'name' updated to '{self.name}'.")

    @property
    def level(self):
        return self._level

    @level.setter
    def level(self, new_level):
                    
        if not isinstance(new_level, str):
            raise TypeError("'level' must be a string.")

        if new_level not in Employee._base_salaries:
            raise ValueError(f"Invalid value '{new_level}' for 'level' attribute.")


# User Editable Region

        if hasattr(self, '_level') and self._level == new_level:
            raise ValueError(f"'{new_level}' is already the selected level.")        
     

# User Editable Region

        self._level = new_level
    

    @property
    def salary(self):
        return self._salary

charlie_brown = Employee('Charlie Brown', 'trainee')
print(charlie_brown)
print(f'Base salary: ${charlie_brown.salary}')

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36

Challenge Information:

Build a Salary Tracker - Step 31

GitHub Link: freeCodeCamp/curriculum/challenges/english/blocks/workshop-salary-tracker/68c9cab4b1118da59eecfc56.md at main · freeCodeCamp/freeCodeCamp · GitHub

try using the getter instead

just do as i done and passed it:

code removed by moderator

Our logics are correct but test needs specific way to code so it asks for that way.

Happy coding!

hi @pradyumnabehera262

It is great that you solved the challenge, but instead of posting your full working solution, it is best to stay focused on answering the original poster’s question(s) and help guide them with hints and suggestions to solve their own issues with the challenge. How to Help Someone with Their Code Using the Socratic Method

We are trying to cut back on the number of spoiler solutions found on the forum and instead focus on helping other campers with their questions and definitely not posting full working solutions.

I tried several ways.

  1. Like @ILM 's suggestion, I used level instead _level like self.level == new_level, but it’s not working either.
  2. I changed the position to new_level == self.level, and it’s working. it’s very strange.
    Hi, @ILM, are new_level == self.level and self.level == new_level different in Python?

they are not, but the tests sometimes need to be refined after the challenges are released

iirc, this is being done for this challenge