类变量的行为

这个问题在这里已经有了答案:

  • Python类变量或类变量一般4个答案
  • python中静态和实例变量的区别。 他们是否存在? 6个答案
  • 对Python类和实例变量的复合赋值5个答案
  • 静态类变量可能吗? 16个答案

  • 由于qb -= 1用名称b创建一个实例变量,请查看您的__dict__

    q.__dict__
    {'b': 4, 'x': 5, 'y': 6}
    
    p.__dict__
    {'x': 5, 'y': 6}
    

    qbab不同,在赋值之后你已经隐藏了ab 。 请注意,这不是Python 3的特定问题,Python 2也具有相同的行为。

    这在语言参考的赋值语句部分有明确说明:

    注意:如果对象是类的实例和属性参考的赋值运算符,表达RHS的两侧时, ax可以访问任一的实例属性或者(如果没有实例属性存在)一类的属性。 LHS目标ax始终设置为实例属性,并在必要时创建它。 因此, ax的两次出现并不一定指向相同的属性:如果RHS表达式引用类属性,LHS将创建一个新的实例属性作为赋值的目标:

    class Cls:
        x = 3             # class variable
    inst = Cls()
    inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
    

    此描述不一定适用于描述符属性,例如使用property()创建的property()

    链接地址: http://www.djcxy.com/p/78771.html

    上一篇: Behavior of class variables

    下一篇: Python class variables scope not as per documentation