我不是程序员,但目前正在学习Python。但是我对对象实例化感到有些困惑。我认为类就像一个模板,对象是基于这个模板生成的(或者实例化的)。这是否意味着一旦对象被创建(例如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