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でオブジェクト指向プログラミングを効果的に活用できます。