Python 3において、クラス(静的)変数とメソッドについて説明します。
クラス変数
クラス変数(静的変数)は、クラスに属する変数で、クラスのすべてのインスタンスで共有されます。クラス変数は、クラス自体に直接定義され、インスタンス化されたオブジェクトではなく、クラス全体で保持されます。
クラス変数の例
class Dog:
species = "Canis familiaris" # クラス変数
def __init__(self, name, age):
self.name = name # インスタンス変数
self.age = age # インスタンス変数
# クラス変数はすべてのインスタンスで共有される
dog1 = Dog("Buddy", 3)
dog2 = Dog("Charlie", 2)
print(Dog.species) # 出力: Canis familiaris
print(dog1.species) # 出力: Canis familiaris
print(dog2.species) # 出力: Canis familiaris
# クラス変数の変更
Dog.species = "Canis lupus"
print(dog1.species) # 出力: Canis lupus
print(dog2.species) # 出力: Canis lupus
クラスメソッド
クラスメソッドは、クラス自体にバインドされており、クラスやクラス変数にアクセスできるメソッドです。クラスメソッドは @classmethod デコレータで定義され、第一引数には cls を使います。これはそのクラス自体を指します。
クラスメソッドの例
class Dog:
species = "Canis familiaris"
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def change_species(cls, new_species):
cls.species = new_species # クラス変数を変更
# クラスメソッドを使用してクラス変数を変更
Dog.change_species("Canis lupus")
dog1 = Dog("Buddy", 3)
dog2 = Dog("Charlie", 2)
print(dog1.species) # 出力: Canis lupus
print(dog2.species) # 出力: Canis lupus
静的メソッド
静的メソッドは、クラスに関連しますが、クラスやインスタンスには依存しないメソッドです。静的メソッドは、 @staticmethod デコレータで定義されます。静的メソッドは、引数に self や cls を取らず、クラス変数やインスタンス変数にアクセスすることはできません。
静的メソッドの例
class Dog:
species = "Canis familiaris"
def __init__(self, name, age):
self.name = name
self.age = age
@staticmethod
def is_dog_name_valid(name):
return name.isalpha() # 名前がアルファベットのみで構成されているかを確認
# 静的メソッドを呼び出し
print(Dog.is_dog_name_valid("Buddy")) # 出力: True
print(Dog.is_dog_name_valid("Buddy123")) # 出力: False
まとめ
- クラス変数: クラス全体で共有される変数で、インスタンスに依存しません。
- クラスメソッド: クラスにバインドされ、クラス変数を操作できるメソッド。
@classmethodで定義され、第一引数にクラス自身を指すclsを取ります。 - 静的メソッド: クラスに関連しますが、クラスやインスタンスに依存しないメソッド。
@staticmethodで定義されます。
これらの概念を理解すると、Pythonでオブジェクト指向プログラミングを効果的に活用できます。
