Python中的类变量和实例变量

时间:2019-12-05 12:23:14

标签: python class variables

我正在练习python类。我知道类变量在所有实例之间共享,而实例变量属于每个对象,因此需要为每个实例定义。在以下类中,如果引用变量raise_amount,则如果我这样写最后一行代码:commons-dbcp,其行为是相同的。

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

self.pay = int(self.pay * Employee.raise_amount)

2 个答案:

答案 0 :(得分:1)

我认为您指的是self.raise_amount。如果您拥有它,那么python必须首先查找实例变量,如果找不到,它将查找名称相似的类变量,并将其副本创建为实例变量并使用它。如果您随后要更改self.raise数量,则仅适用于该实例,而不适用于该类创建的任何其他实例。

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

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

答案 1 :(得分:1)

对表达式v.GetValue<int>()的查找通常会很复杂,因为我们可以在不涉及任何方法或描述符的情况下将其简化。

  1. 如果self.raise_amount有一个名为self的实例属性,则返回该属性的值。

  2. 否则,我们开始寻找 class 属性,从raise_amount的直接类型(此处为self)开始。由于定义了Employee,我们得到了该值...

  3. ...但是如果未定义Employee.raise_amount 怎么办?我们将按照方法Employee.raise_amount的方法解析顺序转到下一个类,即Employee。由于未定义object,因此将引发object.raise_amount