gpt4 book ai didi

python - 请帮助我理解 python 对象实例化。

转载 作者:太空狗 更新时间:2023-10-30 02:21:18 25 4
gpt4 key购买 nike

我不是程序员,目前正在尝试学习 python。但是我对对象实例化有点困惑。我认为 Class 就像一个模板,对象是基于模板制作(或实例化)的。 这是否意味着一旦创建了对象(例如 classinst1 = MyClass() ),模板中的更改不应影响对象中的内容?

此外,下面的代码显示我可以更改类变量“common”,但前提是我没有为对象中的“common”变量分配新值。 如果我在我的对象中为“common”分配一个新值(比如 classinst1.common = 99),那么更改我的类变量“common”不再影响 classinst.common 值????

有人可以为我解释为什么下面的代码会这样吗?它是所有 OO 语言共有的还是只是 python 的古怪方面之一?

===============

>>> class MyClass(object):
... common = 10
... def __init__(self):
... self.myvar=3
... def myfunction(self,arg1,arg2):
... return self.myvar
...
>>> classinst1 = MyClass()
>>> classinst1.myfunction(1,2)
3
>>> classinst2 = MyClass()
>>> classinst2.common
10
>>> classinst1.common
10
>>> MyClass.common = 50
>>> classinst1.common
50
>>> classinst2.common
50
>>> classinst1.common = 99
>>> classinst2.common
50
>>> classinst1.common
99
>>> MyClass.common = 7000
>>> classinst1.common
99
>>> classinst2.common
7000

最佳答案

您对类声明和实例化有大致的了解。但是您的示例中的输出似乎没有意义的原因是实际上有两个名为 common 的变量。第一个是在代码顶部的类声明中声明和实例化的类变量。对于您的大部分示例,这是唯一的 common

当你执行这一行时:

classinst1.common = 99

您正在创建一个对象变量,它是 classinst1 的成员。由于它与类变量同名,因此它隐藏或隐藏 MyClass.common。所有对 classinst1.common 的进一步引用现在都引用该对象变量,而对 classinst2.common 的所有引用继续回落到 MyClass.common因为没有名为 common 的对象变量是 classinst2 的成员。

所以当你执行时:

MyClass.common = 7000

这会更改 MyClass.commonclassinst1.common 仍然等于 99。在示例的最后几行中,当您向解释器询问 的值时>classinst1.commonclassinst2.common,前者指的是classinst1对象的成员变量common,后者指的是类变量 MyClass.common

关于python - 请帮助我理解 python 对象实例化。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076141/

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