非常に広範な質問です。おそらくPython固有です。自己を使うことを離れて、関数は静的でなければならないのですか?
PyCharmなどの多くのIDEツールは、self
への参照を含まない関数に@staticmethod
デコレータを追加することを提案しています。 self
への参照がなくても、関数は、が静的であってはならない場合がありますか?
非常に広範な質問です。おそらくPython固有です。自己を使うことを離れて、関数は静的でなければならないのですか?
PyCharmなどの多くのIDEツールは、self
への参照を含まない関数に@staticmethod
デコレータを追加することを提案しています。 self
への参照がなくても、関数は、が静的であってはならない場合がありますか?
関数を静的として宣言するという点は、self
とcls
パラメータへのアクセスを削除することです。
関数がクラスまたはオブジェクトのいずれかを参照する必要がある場合は、静的であってはなりません。
それ以外の場合は、@staticmethod
でこの機能を飾ることをお勧めします。
クラスの静的でないメソッドは、少なくともクラスのメンバーにアクセスして読み書きできます。
staticメソッドは、代わりに使用するクラスのインスタンスが静的メンバーにしかアクセスできないため、自己を使用できません。静的クラスは、宣言されている場合は一度だけ初期化されます。静的メンバーでも同じですが、クラスのインスタンスとは独立して、静的メンバーは一度だけ作成されます。
もちろん、自己を使わずにメソッドを使うのは意味がありません。クラスメンバを使用しないメソッドはおそらくクラスに属していない可能性があります。つまり、OOの基本原則に違反するケースがある可能性があります。
次のリンクを参照してください`self`の
有無はメソッドインスタンスメソッドがありません;:それは役立つかもしれません*すべての*メソッドは、 'staticmethod'または' classmethod'で装飾されていない限り、インスタンスメソッド*です。どのようなメソッドの型を決定したら、その名前にかかわらず、最初の引数はインスタンスまたはクラス(または単に引数)とみなすことができます。 – chepner
@chepner Pythonで 'staticmethod'を宣言したときに' self'へのアクセスを失うのを除けば、他の危険はありますか?あるいは、静的メソッドとインスタンスメソッドの唯一の違いです。あなたは今それが別々に呼ばれているという事実を無視することができます。 メソッドに 'self'がない場合は、インスタンスメソッドではないことを示す必要があります。だから、PyCharmはなぜ/静的メソッドであると言っているのでしょうか?自己なしでインスタンスメソッドが必要なのですか? –
@OlafSzmidt PyCharmは 'self'を使っているかどうかにかかわらず、必須ではないので静的メソッドかもしれないことを伝えます。それはあなた次第です。インスタンスメソッドを 'self'なしに持つ1つの理由は、インスタンス情報を現在使用していないが、将来的には望んでいると思う場合です。あなたが 'staticmethod'を持っているときに考慮すべきもう一つのことは、クラスからそれを移動させることが理にかなっているかどうかです。 –