Pythonクラス変数とインスタンス変数の違い
Pythonでは、クラス変数とインスタンス変数は異なるタイプの変数です。
クラス定義内で宣言される変数であり、クラスのすべてのインスタンスが共有する属性です。クラス変数の値が変更されると、すべてのインスタンスのそのクラス変数の値も変更されます。クラス変数は通常、クラスに関連する定数や既定値を保存するために使用されます。
クラスのメソッド内で宣言され、各インスタンスが持つ属性のことをメンバー変数(インスタンス変数)といいます。各インスタンスは自分自身のメンバー変数の複製を持ち、それらの値を互いに独立して変更できます。メンバー変数は通常、インスタンス固有のデータを格納するために使用されます。
次に、クラス変数とメンバ変数の使い方の例を示します。
class MyClass:
class_variable = 10
def __init__(self, instance_variable):
self.instance_variable = instance_variable
obj1 = MyClass(5)
obj2 = MyClass(7)
print(obj1.class_variable) # 输出:10
print(obj2.class_variable) # 输出:10
print(obj1.instance_variable) # 输出:5
print(obj2.instance_variable) # 输出:7
MyClass.class_variable = 20
print(obj1.class_variable) # 输出:20
print(obj2.class_variable) # 输出:20
上記の例では、class_variableはクラス変数で、10という値を持っています。instance_variableはインスタンス変数で、コンストラクタによって値が各インスタンス作成時に渡されます。
クラス変数class_variableの値を変更すると、そのクラス変数の値はすべてのインスタンスで変更されます。しかしインスタンスのメンバ変数の値を変更しても、他のインスタンスの同名のメンバ変数の値には影響しません。