私はプログラマーではなく、現在 Python を学ぼうとしています。しかし、オブジェクトのインスタンス化について少し混乱しています。クラスはテンプレートのように考えており、オブジェクトはテンプレートに基づいて作成 (またはインスタンス化) されます。オブジェクトが作成されると(例: classinst1 = MyClass() )、テンプレートの変更はオブジェクトの内容に影響を与えるべきではありませんか?
さらに、以下のコードは、オブジェクトの「共通」変数に新しい値を割り当てていない場合にのみ、クラス変数「共通」を変更できることを示しています。オブジェクトの「common」に新しい値を割り当てた場合 (classinst1.common = 99 など)、クラス変数「common」を変更しても、classinst.common 値には影響しません????
以下のコードがそのように動作する理由を誰かが私に説明してもらえますか? それはすべての OO 言語に共通するものですか、それとも python の風変わりな側面の 1 つにすぎませんか?
===============
>>> 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