[英]python: class variables and instance variables
python如何识别类和实例级别的变量? 他们不同吗?
For example,
class abc:
i = 10
def __init__(self, i):
self.i = i
a = abc(30)
b = abc(40)
print a.i
print b.i
print abc.i
output
--------
30
40
10
意思是,在上面的示例中,当我访问ai (or bi)
和abc.i
,它们是指完全不同的变量吗?
首先,您的示例是错误的,因为如果__init__
只有一个自我,则无法初始化实例。
>>> class abc:
... i = 10
... j = 11
... def __init__(self, x):
... self.i = x
然后,当您访问实例上的属性时,它将首先检查实例变量。 请参阅此处的段落 。 如您所料:
>>> a = abc(30)
>>> a.i
30
>>> a.j
11
此外,类变量是所有实例共享的对象,实例变量归实例所有:
>>> class abc:
... i = []
... def __init__(self, x):
... self.i = [x]
... abc.i.append(x)
...
>>> a = abc(30)
>>> b = abc(40)
>>> a.i
[30]
>>> b.i
[40]
>>> abc.i
[30, 40]
所有这些都假设您的init意图是:
def __init__(self,i):
否则,它是行不通的。 在第三种情况下,abc.i类尚未初始化,因此我充当静态变量,您可以在类定义中将其设置为10。 在前两个实例中,当您调用init时,您创建了一个具有特定i值的abc实例。 当您要求每个实例的i值时,您将获得正确的数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.