迷茫2017-04-17 16:27:00
インスタンスを作成したくないため静的メソッドは宣言されていませんが、メソッドがインスタンス自体のデータを変更しないことが宣言されています。
classmethod は、インスタンスを作成するのではなく、クラス自体を操作するため、宣言されていません (cls を渡した後、独自のプロパティとメソッドを操作できます)。
これはあくまで私の個人的な意見ですので、ご参考までに。
大家讲道理2017-04-17 16:27:00
直感的に、classmethod と staticmethod の関数シグネチャは異なります。一方にはパラメーターがあり、もう一方にはパラメーターがありません。
はすべて Python デコレータです。クラスメソッドではパラメータは cls である必要はなく、任意の名前付き変数を使用できることに注意してください。親クラスと子クラスが関与していない場合、両者の動作は同じように見えますが、親クラスと子クラスが設計されている場合、クラスメソッドは呼び出し元の子クラスのオブジェクトを決定できます
PHP中文网2017-04-17 16:27:00
静的メソッド、クラスメソッド、および通常の内部メソッドの違いは、使用方法の微妙な違いだけでなく、コードの分離にもあります。 static にはクラスやインスタンスの情報は必要ありません。 class にはクラス情報が必要です。 通常のメソッドにはインスタンス情報が必要です。これらの詳細にはあまり注意を払わないでください。分からない時は普通に書いて下さい。必要を感じたときにどちらに切り替えるべきかがわかります。
阿神2017-04-17 16:27:00
オブジェクト指向言語では、static
は通常、変更されたメソッドまたは変数がインスタンスに属さず、クラスに属していることを意味します。
静的メソッドの役割: インスタンスを構築せずにメソッドを呼び出す必要がある場合、このメソッドを静的として定義する必要があります。静的メソッドは override
にすることができず、ほとんどの OO 機能を備えていません。実際には、静的メソッドには手続き型言語の概念があります。
Python コードを書いた私自身の経験に基づくと、たとえば、静的メソッドと関数のどちらを選択すればよいのかわかりません。したがって、OO ではなく Python 独自の機能を学ぶことに重点を置くことをお勧めします。