Effective Python クラスと継承 読書メモ Part3

@classmethodポリモルフィズムを使ってオブジェクトをジェネリックにする

Effective Pythonの読書メモです。
今回は、項目24について書いていきます。

 

クラスメソッド・スタティックメソッド

クラスメソッド

@classmethodで定義することができます。
【Python】インスタンスメソッド、staticmethod、classmethodの違いと使い方

こんな感じで、メソッドの上に定義して使用します。

どんなときに使用するのか

今は下記の認識です。

classmethod: クラス変数にアクセスすべきときや、継承クラスで動作が変わるべきときは classmethodを使おう。

下記記事より引用
Pythonで classmethod、staticmethod を使う

スタティックメソッド

では、スタティックメソッドはどのような場合に使用するのでしょうか。
それは、クラスに依存しないロジックをメソッドとして実装する場合になります。
では普通のメソッド使えば良いじゃんとなるのですが、
①クラスを継承し、親と子で挙動が変わり、
②「クラスに依存しない処理である」ことを強調したいときに便利です。

下記記事を参考にしました。
[Python] クラスメソッド・スタティックメソッドの違い

じゃあ結局継承クラスで挙動が変わるメソッドに対してどっち使うんだろう?というのはまだ未解決です……

 

オブジェクトをジェネリックにする

長くなりましたが、ここからが本題です。
実装は下記のような感じです。

覚えておくこと

・クラスに対して、代わりのコンストラクタを定義するために@classmethodを使う
・具体化したサブクラスを作成して連携するジェネリックな方式を提供するには、クラスメソッドポリモルフィズムを使う

 

参考にした記事

Effective Pythonはその名の通りEffectiveだった
Pythonで classmethod、staticmethod を使う
Python の classmethod と staticmethod ってなに?