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属性未更改。有人想解释否决票,以便我可以解决问题吗?虽然正在讨论相同的机制,但这不是重复的。