使用@classmethod设置类变量[重复]

问题描述 投票:0回答:1

我有一个类

Employee
和一个类变量
raise_amount
。我为这个类创建了两个实例,
emp_1
&
emp_2

这个问题并不是问什么是类变量,或者类变量与实例变量有何不同。 这是关于类变量的赋值

我正在尝试通过@classmethod方法更改此类的

raise_amount
变量
set_raise_amt(cls, amount)

如果我先设置

emp_1.raise_amount=3
,然后我调用
emp_1.set_raise_amt(30)

我得到了:

emp_1.raise_amount=3

emp_2.raise_amount=30

类方法不是应该将

raise_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
python python-3.x variable-assignment class-variables
1个回答
3
投票

您已使用

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。

© www.soinside.com 2019 - 2024. All rights reserved.