Python:静态变量(或者,class.some\u var和inst.some\u var之间的差异)

Python:静态变量(或者,class.some\u var和inst.some\u var之间的差异),python,oop,static,Python,Oop,Static,我写了一篇简单的课文 class Test: stat = 0 def __init__(self): self.inst = 10 def printa(self): print Test.stat print self.inst 现在我已经创建了这个类的两个对象 $ a = Test() $ b = Test() 当我说a.printa()或b.printa()时,它输出0 10,这是可以理解的 但是当我说 $

我写了一篇简单的课文

class Test:

    stat = 0

    def __init__(self):
        self.inst = 10

    def printa(self):
        print Test.stat
        print self.inst
现在我已经创建了这个类的两个对象

$ a = Test()
$ b = Test()
当我说
a.printa()
b.printa()
时,它输出
0 10
,这是可以理解的

但是当我说

$ a.stat = 2
$ print a.stat
它将输出

2
1
10
但是当我说
a.printa()
它将输出

2
1
10
objInstance.staticVar
ClassName.staticVar
有什么区别??它在内部做什么?

1
10
我想你是说

0
10
因为类变量
stat
从未更改


为了回答您的问题,它这样做是因为您向
a
对象添加了一个实例成员变量
stat
。你的
objInstance.staticVar
根本不是一个静态变量,它是你添加的新变量。

除非你做些事情来改变属性赋值的工作方式(使用
\uuuuuu setattr\uuuuu>或描述符),将属性赋值给
某个对象。某些属性总是赋值给实例属性,即使已经存在具有该名称的类属性

因此,当你

a = Test()
a.stat
是类属性。但在你这么做之后

a.stat = 2

a.stat
现在引用实例属性。class属性未更改。

有人想解释否决票,以便我可以解决问题吗?虽然正在讨论相同的机制,但这不是重复的。