2

I have a class Employee with a class variable raise_amount. I created two instances, emp_1 & emp_2, for this class.

This question is not asking, what is a class variable, or how class variables differ from instance variables. This is about assignment of class variables.

I am trying to change the raise_amount variable of this class through the @classmethod method set_raise_amt(cls, amount).

If I set emp_1.raise_amount=3 first, then I called the emp_1.set_raise_amt(30).

I got:

emp_1.raise_amount=3

emp_2.raise_amount=30

Isn't the class method suppose to set both of raise_amount to 30?

class Employee:
    raise_amount=1.04

    def __init__(self, first,last,pay):
        self.first=first
        self.last=last
        self.pay=pay

    @classmethod
    def set_raise_amt(cls,amount):
        cls.raise_amount=amount

emp_1=Employee('Corey','Scott',50000)
emp_2=Employee('Test','UserA',60000)

emp_1.raise_amount=3
emp_1.set_raise_amt(30)

print(emp_1.raise_amount)
print(Employee.raise_amount)
print(emp_2.raise_amount)

#the results will be:
# 3
# 30
# 30
0

1 Answer 1

3

You've added a new attribute for emp_1 with emp_1.raise_amount = 3.

Try this and see the result:

print(emp_1.__dict__)
print(emp_2.__dict__)
# will print:
# {'first': 'Corey', 'last': 'Scott', 'pay': 50000, 'raise_amount': 3}
# {'first': 'Test', 'last': 'UserA', 'pay': 60000}

When print emp_1.raise_amount, the new instance attribute is printed. While for emp_2, the class attr/var is printed.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.