gpt4 book ai didi

variables - Python类变量和实例变量混淆

转载 作者:行者123 更新时间:2023-12-02 03:06:57 26 4
gpt4 key购买 nike

关于以下代码,我遇到了一些稍微出乎意料的行为:

class MyClass(object):
value = 5

object1 = MyClass()
object2 = MyClass()

print object1.value #This displays 5
print object2.value #This displays 5
print MyClass.value #This displays 5

#So far so good

object1.value = 6

print object1.value #This displays 6
print object2.value #This displays 5
print MyClass.value #This displays 5

#Still good, but the confusing part is coming up...

MyClass.value = 10

print object1.value #This displays 6. I was expecting it to be 10!
print object2.value #This displays 10
print MyClass.value #This displays 10

如您所见,我正在更改变量的实例版本,并获得了预期的结果。但是,当我随后将 MyClass.Value 更改为 10 时,我希望它会更改所有实例的值。但也许我的理解不正确。

如有任何帮助,我们将不胜感激。

最佳答案

起初,object1object2都是 MyClass 的实例没有任何特定于实例的变量。然后你改变object1.value .它仍然是MyClass的成员, 但是当你要求 object1.value你得到 6 因为它没有查看 MyClass的值(value)一旦它看到它就有了自己的值(value)。到目前为止,这给出了预期的行为。

当你改变MyClass.value到 10,随时查找 MyClass.value你得到 10。当你直接查找或通过 object2 查找时会发生这种情况。 .然而,object1还是有自己的value ,因为你将它设置为 6。所以当你要求 object1.value , 它查找 valueobject1看到 6。它没有注意到 MyClass的版本改变了。

对于 object2 不会发生这种情况因为它没有关联的 value ;在 object2 中查找失败, 所以它会尝试查找 object2.__class__.value .自 object2MyClass 的实例, object2.__class__MyClass ,它给出 10。

如果你说 del object1.value , 然后查找 object1.value , 你会从 MyClass 得到 10 , 就像 object2 .

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

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