Build a Salary Tracker - Step 39

Tell us what’s happening:

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

i’ve used Employee._base_salaries, don’t forgot abt period and used self.level. What’s wrong?

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.")
        if hasattr(self, '_level') and new_level == self.level:
            raise ValueError(f"'{self.level}' is already the selected level.")
        if hasattr(self, '_level') and Employee._base_salaries[new_level] < Employee._base_salaries[self.level]:
            raise ValueError("Cannot change to lower level.")
        print(f"'{self.name}' promoted to '{new_level}'.")
        self.salary = Employee._base_salaries[new_level]
        self._level = new_level

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

    @salary.setter
    def salary(self, new_salary):
        if not isinstance(new_salary, (int, float)):
            raise TypeError("'salary' must be a number.")
            
# User Editable Region
        if hasattr(self, '_level') and Employee._base_salaries[self.level] > new_salary:
            raise ValueError(f"Salary must be higher than minimum salary ${Employee._base_salaries[self.level]}.")      
# User Editable Region
        self._salary = new_salary
        print(f'Salary updated to ${self.salary}.')

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

Your browser information:

User Agent is: Mozilla/5.0 (X11; Linux x86_64; rv:154.0) Gecko/20100101 Firefox/154.0

Challenge Information:

Build a Salary Tracker - Step 39

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

nvm. you SHOULD write new_salary < Employee._base_salaries[self.level]. please, fix some issues like this or tell users abt such small things. it’s always making a wish to drop course :sob:

Hi @MrHampter,

After your existing if statement, create another one for when the new salary is less than the base salary for the current level.

Not to say the instructions are always perfect but, moving forward, you should be fine if you write your code the way the instruction is written. It doesn’t say “when the base salary for the current level is more than the new salary”; it says, “when the new salary is less than the base salary for the current level”.

Happy coding