python中的类变量v/s实例变量

2024-04-25 21:39:45 发布

您现在位置:Python中文网/ 问答频道 /正文

根据我过去对python oop的了解,我知道python对所有类实例都有一个类变量的单一副本;这意味着:

>>> class A: foo = []
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo
[5]

但当我这么做的时候:

>>> class A():
    cl_var=5
    def __init__(self,b):
        self.obj_var=b


>>> a1,a2=A(2),A(5)
>>> a1.cl_var
5
>>> a1.cl_var=23
>>> a2.cl_var
5 

为什么a2.cl\u var没有更改为23?你知道吗


Tags: 实例selfobja2fooinitclvar
1条回答
网友
1楼 · 发布于 2024-04-25 21:39:45

当您分配给a1.cl_var时,您将重新绑定与a1相关联的^{cl_var。这不会影响a2.cl_var。你知道吗

>>> id(a1.cl_var), id(a2.cl_var)
(11395416, 11395416)

如您所见,a1.cl_vara2.cl_var是同一个对象。你知道吗

但是,当您指定给a1.cl_var时,它们将成为不同的对象:

>>> a1.cl_var=23
>>> id(a1.cl_var), id(a2.cl_var)
(11395200, 11395416)

a/b示例中不会发生这种情况,因为在那里您可以通过引用修改foo。您不需要重新绑定(即分配给)它。你知道吗

相关问题 更多 >