使用@classmethod设置类变量

时间:2019-01-09 08:24:21

标签: python python-3.x

我有一个雇员类,其类变量为raise_amount,并且为此类创建了两个实例emp_1和emp_2。

我正在尝试通过@classmethod方法set_raise_amt(cls,amount)来更改此类的raise_amount变量。

如果我首先设置emp_1.raise_amount = 3,那么我将调用set_raise_amt(30)。 我知道了:

emp_1.raise_amount = 3

emp_2.raise_amount = 30

我不明白。类方法不是应该将两个boost_amount都设置为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

1 个答案:

答案 0 :(得分:0)

您已为emp_1添加了emp_1.raise_amount = 3的新属性。

尝试一下并查看结果:

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}

在打印emp_1.raise_amount时,将打印新的实例属性。对于emp_2,将打印attr / var类。