繁体   English   中英

python:类变量和实例变量

[英]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 ,它们是指完全不同的变量吗?

在上面的示例中,当我访问ai(或bi)和abc.i时,它们是指完全不同的变量吗?

是。

abc.i是一个类对象引用。

ai和bi都是实例对象引用。

它们都是单独的参考。

首先,您的示例是错误的,因为如果__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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM