Pythonのclassmethod(クラスメソッド)とは?使い方とコード例を解説
Pythonのclassmethod(クラスメソッド)とは
クラスメソッドは、第一引数としてクラス自身を受け取る特殊なメソッドです。この仕組みにより、クラスからインスタンス(オブジェクト)を生成しなくても、クラスに属するメソッドを直接呼び出すことができます。
使い方は非常にシンプルで、クラス内のメソッド宣言の直前にデコレータ @classmethod を付けるだけです。こうすることで、そのメソッドに直接アクセスできるようになります。
クラスメソッドの主な特徴は以下の通りです。
- クラスメソッドはクラスに紐付けられており、利用するためにクラスのインスタンス化に依存しません。
- クラスメソッドからクラスの状態(クラス変数など)を変更すると、その変更はすべてのインスタンスに波及します。
classmethodの基本的な使い方
次の例では、WeekDay というクラスを作成し、その中に daynames というメソッドを定義しています。そして、クラスをインスタンス化せずに(つまりオブジェクトを生成せずに)このメソッドへアクセスしています。
コード例
class WeekDay:
day_name = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
# クラスメソッドの適用
@classmethod
def daynames(cls):
print('The WeekDays are', cls.day_name)
WeekDay.daynames()
# または
WeekDay().daynames()
実行結果
上記のコードを実行すると、次のような出力が得られます。
The WeekDays are ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] The WeekDays are ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
なお、慣例としてクラスメソッドの第一引数には cls を使うのが一般的です。WeekDay.daynames() のようにクラスから直接呼び出した場合も、WeekDay().daynames() のようにインスタンス経由で呼び出した場合も、同じ結果になる点に注目してください。
classmethodを使わない場合との比較
同じ結果は、クラスメソッドを使わずにクラス外へ関数を定義することでも得られます。しかし、この方法ではデータと処理が分離してしまい、コードのまとまりが失われます。こここそが、クラスメソッドが必要とされる理由です。
コード例
def daynames():
day_name = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
print('The WeekDays are', day_name)
daynames()
実行結果
上記のコードを実行すると、次のような出力が得られます。
The WeekDays are ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
まとめ
クラスメソッドは、インスタンス化せずにクラスレベルで動作するメソッドを定義したい場合に便利です。特に、代替コンストラクタ(ファクトリメソッド)やクラス全体に関わる設定の管理などでよく活用されます。第一引数 cls を通じてクラス自身にアクセスできる点が、通常のインスタンスメソッドとの大きな違いです。
-
Python Tkinterのafter()メソッドの使い方を徹底解説
Tkinterは、PythonでGUIアプリケーションを作成するための標準ライブラリです。ウィンドウやボタン、ラベルなどのウィジェットを作成・操作するための組み込みメソッドが多数用意されており、データの表示やGUIイベントの処理を簡単に実装できます。本記事では、その中でも特に便利なafter()メソッドの使い方について、具体的なコード例とともに詳しく解説します。after()メソッドの基本構文.after(delay, FuncName=FuncName)このメソッドは、指定した遅延時間(ミリ秒単位)が経過した後に、引数として渡した関数FuncNameを呼び出します。タイマー処理や定期的な更新
-
Pythonの継承とは?単一継承と階層継承の基本をサンプルコードで解説
本記事では、Python 3.xにおける継承(インヘリタンス)とクラスの拡張方法について詳しく解説します。 継承とは、現実世界のモノや概念の関係性を自然に表現できる、オブジェクト指向プログラミングの中核となる仕組みです。継承を活用すると、次のようなメリットが得られます。 再利用性:すでに書いたコードを流用でき、重複を削減できる 推移性:クラス間の関係を連鎖的に引き継げる 開発速度の向上:ゼロから書かずに済むため、短期間で開発できる 保守性・拡張性:既存クラスを壊さずに機能を追加しやすい 継承の5つの種類 Pythonの継承は、その構造によって主に以下の5種類に分類されます。 単一継承(