首页 > 解决方案 > Python中的类变量和实例变量

问题描述

我正在练习python课程。我知道类变量在所有实例之间共享,而实例变量属于每个对象,因此需要为每个实例定义。在下面的类中,参考变量 raise_amount,如果我这样写最后一行代码:self.pay = int(self.pay * Employee.raise_amount),行为是相同的。

如果有的话,这两种情况有什么区别?

class Employee:

    raise_amount = 1.04

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

        self.first = first
        self.last = last
        self.pay = pay
        self.email = first+"."+last+"@company.com"

    def apply_raise(self): #but this is not an attribute
        self.pay = int(self.pay * self.raise_amount) 
       #or self.pay = int(self.pay * Employee.raise_amount) 

标签: pythonclassvariables

解决方案


我假设您指的是 self.raise_amount。在你拥有它的情况下,python 必须首先查找实例变量,如果没有找到,它会查找类似命名的类变量,并将它的副本创建为实例变量并使用它。如果您要更改 self.raise 数量,则仅适用于该实例,而不适用于该类的任何其他实例。

尝试创建该类的实例并在其上使用 apply_raise 方法。然后尝试将 raise_amount 类变量更改为 2.0 并再次调用实例上的方法。您应该看到的是数量只增加了 1.04 倍,而不是 2。那是因为它使用了在您第一次运行该方法时创建的实例值。

注意:原始帖子已被编辑以更改为使用班级名称作为加薪金额。这篇文章是 self.raise_amount 时的回复。


推荐阅读