gpt4 book ai didi

python - python中的类变量与实例变量

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:01 24 4
gpt4 key购买 nike

根据我过去对 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_var 没有更改为 23?

最佳答案

当您分配给 a1.cl_var 时,您重新绑定(bind) cl_vara1 关联。这不会影响 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。您不会重新绑定(bind)(即分配给)它。

关于python - python中的类变量与实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18682610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com