Pythonのクラスメソッドと静的メソッドの違い・使い分けガイド
生徒
「Pythonのクラスには、普通のメソッド以外にも種類があるって聞いたんですが、本当ですか?」
先生
「あります。代表的なのがクラスメソッドと静的メソッドです。役割が違うので、使い分けが大切です。」
生徒
「名前が似ていて、どう違うのか全然わかりません……。」
先生
「心配いりません。日常の例えを使いながら、順番に整理していきましょう。」
1. まずはPythonのメソッドの基本
Pythonのクラスには「メソッド」と呼ばれる処理を書けます。メソッドとは、クラスに属する関数のことです。関数は処理のまとまりでしたが、メソッドは「クラスの中にある関数」と考えると分かりやすいです。
これまでによく見てきたのは「インスタンスメソッド」です。インスタンスメソッドは、クラスから作られた実体であるインスタンスを操作します。自分専用のノートに書き込むようなイメージです。
2. クラスメソッドとは何か
クラスメソッドは、インスタンスではなく「クラスそのもの」を操作するためのメソッドです。クラス全体に関係する処理を書くときに使います。
クラスメソッドを作るときは、@classmethodという目印を書きます。そして、最初の引数にはclsという名前を使います。これは「このクラス自身」を表します。
class User:
count = 0
def __init__(self, name):
self.name = name
User.count += 1
@classmethod
def get_count(cls):
return cls.count
user1 = User("太郎")
user2 = User("花子")
print(User.get_count())
2
この例では、ユーザーが何人作られたかをクラス全体で管理しています。クラスメソッドは「クラス共有の情報を見る窓口」のような役割を持ちます。
3. 静的メソッドとは何か
静的メソッドは、クラスにもインスタンスにも強く依存しない処理を書くためのメソッドです。言い換えると、「たまたまクラスの中に置いている関数」です。
静的メソッドを作るときは、@staticmethodという目印を使います。引数にselfやclsは必要ありません。
class MathUtil:
@staticmethod
def add(a, b):
return a + b
print(MathUtil.add(3, 5))
8
この処理は、特定のインスタンスやクラスの状態を使っていません。ただの計算処理なので、静的メソッドとして書くのが適しています。
4. 日常の例えで理解する違い
クラスメソッドは「学校全体のルール」を扱う先生のような存在です。生徒個人ではなく、学校全体に関わる情報を管理します。
一方、静的メソッドは「学校に関係する便利な計算係」です。誰の成績でもなく、学校の人数でもなく、ただ計算をするだけの役割です。
5. どう使い分ければいいのか
クラスの情報を使う、またはクラス全体の状態を変更したい場合はクラスメソッドを使います。例えば、インスタンスの数を数える、共通設定を管理する、といった場面です。
クラスにもインスタンスにも関係なく、処理だけをまとめたい場合は静的メソッドが向いています。クラスに関係する処理を整理するための箱として使うと、コードが読みやすくなります。
6. 初心者が混乱しやすいポイント
最初は「全部インスタンスメソッドでいいのでは」と感じるかもしれません。しかし、役割を分けることで、コードの意味がはっきりします。
クラスメソッドと静的メソッドは、Pythonのオブジェクト指向プログラミングを整理するための道具です。無理に使う必要はありませんが、意味を知っておくと理解が深まります。