Magicode logo
Magicode
1

Python クラスメソッドとスタティックメソッドのいろいろ

#はじめに この記事では「クラスメソッド」とは何かについて書いていきます。 前回までの記事 ↓ ↓ ↓ pythonのプロパティのあれこれ

#クラスメソッドとは 簡単に一言で言えば、「クラス変数のようにクラスから直接使用できるメソッド」のことです。 (メソッドとはクラス内の関数のことです)

これがクラスメソッドの形です。今まで見てきた関数とは違う部分がいくつかあるので、見分けがつきやすいと思います。 ①インスタンス(実体)が存在しないので、自分自身を表す'self'は用意されません。 ②'self'の代わりに'cls'という引数が用意され、クラスメソッドが保管されているクラスのオブジェクトが代入される。

クラスメソッドを呼び出す際は、クラスから直接呼び出すことが可能です。

呼び出しの部分も違うので、使う際には注意してください。

#クラス変数 先ほどクラスメソッドのことを、「クラス変数のようにクラスから直接使用できるメソッド」と言いました。 しかしそもそもクラス変数が何かわからないと、何のことかさっぱりだと思います クラス変数とは下のコードの「message」の部分です。

普通の変数とパッと見変わらないので、そんなに難しくないと思います。

一番最後をみてもらえればわかるように、インスタンスを作成しないでも、クラスから直接呼び出すことができます。 メソッド(defがついているもの)と違い、インスタンスではなくクラスそのものに値を保管しているからです。

そしてクラス変数とメソッドを合わせたものがクラスメソッドです。 クラスから直接呼び出せて、変更も簡単にできるというものです。

#クラスメソッドの活用例

インスタンスを作成せずに、クラスから直接呼び出せていることが確認できると思います。 値の変更も簡単にできるので通常のメソッドとは違うことがわかります。

#インスタンスを作成 では、通常のメソッドとクラスメソッドを用意し、インスタンスを作成したときにどのような動きをするのか確認していきましょう。

これはインスタンスが作成されるたびに'count'が1足されていくものです。

'a','b','c'で3回インスタンスを作成した後にクラスメソッドを呼び出して、何回カウントされたのかを表示しています。 3回インスタンスが作成されているので'count'が'3'足されているのが確認できます。 クラスメソッドを呼び出した時は、インスタンスが作成されないので足されていません。

#クラスメソッドとメソッドや関数との違いは? ここでそれぞれの違いをまとめていきたいと思います。

このように並べてみると違いがよくわかると思います。 ①クラスメソッドとメソッドの違い ->メソッドはインスタンスを作成しないと呼び出せないですが、クラスメソッドはクラスから直接呼び出すことができます。

②クラスメソッドと関数の違い -> 第一引数に'cls'というクラス自体を取得することができます。また、クラスの中にあるので、クラスをインポートすれば使えるという点も違います。

#スタティックメソッド ここからはスタティックメソッドについて説明していきます。 スタティックメソッドとはクラスメソッドとにていますが、違いは引数を指定する必要がない点です 実際に見ていきましょう。

クラスメソッドの時は第一引数に'cls'というものがありましたが、スタティックメソッドにはありません。 メソッドとほとんど同じと思ってもらうとわかりやすいです。 あまり使われないですが、クラスメソッド同様クラスから直接呼び出し¥すことができるのが特徴です。

#終わりに 今回の記事では「クラスメソッド」と「スタティックメソッド」について書きました。 記事はこれからもアップデートしていく予定です。 前回までの記事 ↓ ↓ ↓ pythonのプロパティのあれこれ

Discussion

コメントにはログインが必要です。