Python 3におけるクラス(静的)変数とメソッド

PYTHON3 チュートリアル

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 デコレータで定義されます。静的メソッドは、引数に selfcls を取らず、クラス変数やインスタンス変数にアクセスすることはできません。

静的メソッドの例

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

購読
通知
0 Comments
Inline Feedbacks
View all comments