Pythonクラス変数の定義規則は?
Python のクラス変数の定義規則は次のとおりです。
- クラス定義内で直接宣言され、通常はクラスのメソッドの外側にある変数。
- クラス変数は、すべてのインスタンスで共有でき、さらにクラス名を使って直接アクセスできます。
- クラス変数はオブジェクトをインスタンス化したときではなく、クラスのライフサイクル全体を通して存在します。
- クラス変数は複数のインスタンス对象で共有して変更・参照できますが、クラス変数を変更すると全てのインスタンスオブジェクトに影響が出るので注意が必要です。
- 「それ自身の」クラス変数名
- クラス変数はクラス全体がスコープで、クラス内のどのメソッドからもアクセスできます。
- クラス変数の場合はインスタンス変数やローカル変数と区別するため、原則として大文字とアンダースコアを利用し命名します。
サンプルコードは以下の通りです。
class MyClass:
class_variable = 100 # 类变量
def __init__(self):
self.instance_variable = 200 # 实例变量
def instance_method(self):
print(self.class_variable) # 访问类变量
self.class_variable = 300 # 修改类变量
print(self.class_variable)
@classmethod
def class_method(cls):
print(cls.class_variable) # 访问类变量
cls.class_variable = 400 # 修改类变量
print(cls.class_variable)
@staticmethod
def static_method():
print(MyClass.class_variable) # 访问类变量
MyClass.class_variable = 500 # 修改类变量
print(MyClass.class_variable)
# 访问类变量
print(MyClass.class_variable)
# 创建实例对象
obj1 = MyClass()
obj2 = MyClass()
# 通过实例对象访问类变量
print(obj1.class_variable)
print(obj2.class_variable)
# 修改类变量
obj1.class_variable = 600
print(obj1.class_variable)
print(obj2.class_variable)
# 调用不同类型的方法
obj1.instance_method()
obj1.class_method()
obj1.static_method()