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
意味着,在上面的示例中,当我访问a.i (or b.i)
和abc.i
时,他们指的是完全不同的变量?
答案 0 :(得分:2)
在上面的示例中,当我访问a.i(或b.i)和abc.i时 指的是完全不同的变量?
是
abc.i是Class Object参考。
a.i和b.i是Instance Object个引用。
它们都是单独的参考文献。
答案 1 :(得分:2)
首先,如果__init__
中只有自我,则无法初始化实例,因此您的示例有误。
>>> class abc:
... i = 10
... j = 11
... def __init__(self, x):
... self.i = x
然后,当您访问实例上的属性时,它将首先检查实例变量。请参阅paragraph here。如你所知:
>>> 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]
答案 2 :(得分:1)
这就是假设你的init应该是:
def __init__(self,i):
其他方面它不起作用。在第三种情况下,abc.i该类尚未初始化,因此我充当一个静态变量,您可以在类定义中将值设置为10。在前两个实例中,当您调用init时,您创建了一个具有特定i值的abc实例。当您询问每个实例的i值时,您会得到正确的数字。