繁体   English   中英

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

[英]please help me understanding python object instantiation.

我不是程序员,我正在尝试学习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.common行中,当您向解释器询问classinst1.commonclassinst2.common的值时,前者指的是classinst1对象成员变量common后者引用类变量MyClass.common

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM