在类中直接声明的属性称为类属性。 和你的例子一样(尽管缩进和一些语法是错误的),value1,value2和value3是类gaurab的类属性。
在其他属性中声明的属性是实例属性,并绑定到声明它们的类属性。 像value1和value2变量绑定到init在类的东西。
将类属性与在静态类型语言中发现的静态变量(如C++,JAVA等)进行比较。 类属性由类的所有实例共享,因此只有这样的属性的一个副本被创建(例如,类的实例拥有自己的实例变量副本)。
当生成something
类的实例时,会执行something
的__init__
方法,并在其参数self
中接收新实例。此方法创建两个实例属性:value1
和value2
。然后这个实例被分配到实例变量中,所以它被绑定到具有这两个实例属性的事物上。
例如:
class foo:
def __init__(self):
self.Alist=[] #It is an instance attribute
Blist=[] #It is a class attribute
对于这个类定义,当我们创建作为2类实例:
var1 = foo()
var2 = foo()
的Blist
属性由两个var1
和var2
但Alist
属性共享为不同两个都。所以,如果我们操作如下:
var1.Alist.append(1)
var1.Blist.append(10)
var2.Alist.append(2)
var2.Blist.append(20)
的
print(var1.Alist)
print(var1.Blist)
print(var2.Alist)
print(var2.Blist)
输出将是:
[1]
[10]
[2]
[10,20]
这是因为Blist
变量同时受var1
和var2
所以共享,变化在var1.Blist
受影响var2.Blist
,反之亦然。 但是,var1.Alist
和var2.Alist
是彼此独立的。因此,如果你想要一个属性对于所有类的实例是共同的,那么你将它声明为类属性(如果不是常常需要的话),你可以声明它为实例属性。
您的缩进是错误的!你也想看看这里:http://stackoverflow.com/questions/8959097/what-is-the-difference-between-class-and-instance-variables-in-python – elena