体系的に学ぶPython - クラス:静的メソッドとクラスメソッド - 【静的メソッドとクラスメソッドを使う理由】

カテゴリカタログ:「体系的に学べるPython」総合カタログ


すでに学んだように、クラス メソッドは通常、メソッド呼び出しの暗黙のサブジェクトとして機能するために、最初のパラメーターで現在のインスタンス オブジェクトを渡します。これは、「オブジェクト指向プログラミング」における「オブジェクト」です。ただし、現在、このモデルを変更するには 2 つの方法があります。これら 2 つの方法を説明する前に、これがなぜ私たちにとって関係があるのか​​を説明する必要があります。

場合によっては、プログラムはインスタンスではなくクラスに関連付けられたデータを処理する必要があります。たとえば、クラスによって作成されたインスタンスの数を記録したり、現在メモリ内にあるクラスのすべてのインスタンスのリストを維持したいとします。この形式の情報と対応する処理は、インスタンスではなくクラスに関連付けられます。つまり、この情報は通常、クラス自体に保存され、インスタンスを必要とせずに処理できます。

このようなタスクでは、多くの場合、クラスの外で作成された単純な関数で十分です。クラス名を通じてクラス プロパティにアクセスできるため、インスタンスを経由せずにクラス データにアクセスできます。ただし、そのようなコードをより適切にクラスに結び付け、そのようなプロシージャを通常どおり継承を使用してカスタマイズできるようにするには、そのような関数をクラス自体の中に記述する方がよいでしょう。これを行うには、インスタンス パラメータを渡さないだけでなく、selfインスタンス パラメータを期待しないメソッドがクラス内に必要です。

Python は、静的メソッドの概念を通じてそのような目標をサポートします。静的メソッドは、クラス内にネストされたパラメーターのない単純な関数でありself、インスタンス プロパティではなくクラス プロパティを操作するように設計されています。self静的メソッドは、クラスまたはインスタンスから呼び出された場合でも、自動パラメーターを受け入れません。通常、インスタンスの動作を提供するのではなく、すべてのインスタンスにわたる情報をログに記録します。

あまり一般的には使用されていませんが、Python はクラス メソッドの概念もサポートしています。クラス メソッドは、インスタンス経由で呼び出されるかクラス経由で呼び出されるかに関係なく、渡される最初のパラメーターがインスタンス オブジェクトではなくクラス オブジェクトであるクラスのメソッドです。selfこのメソッドは、インスタンスを通じて呼び出された場合でも、クラス パラメーターを渡すことによって (よく言われるように) クラス データにアクセスすることもできます。通常のメソッド (インスタンス メソッド) は呼び出されるときに追加のサブジェクト インスタンスを受け入れる必要がありますが、静的メソッドとクラス メソッドはその必要がありません。

参考文献:
[1] Mark Lutz. Python Learning Manual[M]. Machinery Industry Press、2018.

おすすめ

転載: blog.csdn.net/hy592070616/article/details/135433286