gpt4 book ai didi

python - 混淆python类和实例变量

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:15 25 4
gpt4 key购买 nike

我看到以下 Python 文档说“在类中定义变量”将是类变量:

"Programmer's note: Variables defined in the class definition are class variables; they are shared by all instances. "

但是当我写这样的示例代码时:

class CustomizedMethods(object):
class_var1 = 'foo'
class_var2 = 'bar'

cm1 = CustomizedMethods()
cm2 = CustomizedMethods()
print cm1.class_var1, cm1.class_var2 #'foo bar'
print cm2.class_var1, cm2.class_var2 #'foo bar'
cm2.class_var1, cm2.class_var2 = 'bar','for'
print cm1.class_var1, cm1.class_var2 #'foo bar' #here not changed as my expectation
print cm2.class_var1, cm2.class_var2 #'bar foo' #here has changed but they seemed to become instance variables.

我很困惑,因为我尝试的与 Python 的官方文档不同。

最佳答案

当您在实例上分配一个属性时,它是在实例上分配的,即使它以前存在于类中也是如此。起初,class_var1class_var2 确实是类属性。但是当您执行 cm1.class_var1 = "bar" 时,您并没有更改此类属性。相反,您正在创建一个新属性,也称为 class_var1,但这是实例 cm1 上的一个实例属性。

这是另一个显示差异的示例,尽管它仍然可能有点难以理解:

>>> class A(object):
... var = []
>>> a = A()
>>> a.var is A.var
True
>>> a.var = []
>>> a.var is A.var
False

起初,a.var is A.var 为真(即,它们是同一个对象):因为 a 没有它自己的名为 var,尝试访问类。在你给 a 一个它自己的实例属性之后,它就不再和类上的一样了。

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

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