pythonクラスメソッド、インスタンスメソッド、静的メソッドの違いと適用シーン

1910 ワード

pythonはオブジェクト向け言語であり,オブジェクト向けとは何か,すべてをオブジェクト(インスタンス)と見なし,オブジェクトとオブジェクトの間にメソッド(動作)で関連関係を築くことである.
クラスとは:同じプロパティと動作を持つオブジェクトをグループに分けます.つまり、クラスがオブジェクトを記述するためのツールです.
クラスの役割:クラスで1つ以上のオブジェクト(インスタンス)クラス内の変数とメソッドを作成して、このように作成されたすべてのインスタンスに共有できます.
オブジェクトとは:現実の物体またはインスタンスを指します.
簡単な例:
class Foo():
    Species = '  '#   
    def __init__(self,name):
        self.name = name#    
        
    def func(self, x):
        print('    ')

    @classmethod
    def class_foo(cls):
        print('   ')

    @staticmethod
    def static_foo():
        print('    ') 
f = Foo('  ')  
#      
f.func()
#     
Foo.class_foo()
#      
Foo.static_foo()

クラスFooを定義すると、メモリにクラスオブジェクトFooが作成されたメモリ空間に相当します.クラス空間にはSpecies(クラス属性)、インスタンスメソッド、静的メソッド、クラスメソッドがあります.インスタンスオブジェクトfを作成することは、メモリにインスタンスオブジェクトが作成されたメモリ領域があり、インスタンス空間にname(インスタンス属性)があり、独自の方法があり、その中の_class__クラスオブジェクトを指し、このインスタンスがどのクラスに属するかを示し、1つのクラスオブジェクトに複数のインスタンスオブジェクトを持つことができる.
区別する
インスタンスメソッド、クラスメソッド、静的メソッドはすべてクラスに属し、違いは呼び出し方式が異なることである.
インスタンスメソッド:
インスタンスオブジェクト呼び出し、少なくとも1つのパラメータself(インスタンスオブジェクトを表す)があり、インスタンスメソッドを実行すると、その呼び出しメソッドのオブジェクトがselfに自動的に割り当てられます(selfは実際には呼び出しを参照するインスタンスオブジェクトです).
クラスメソッド(@classmethod装飾):
クラスとインスタンスオブジェクトを呼び出すことができます.少なくとも1つのパラメータcls(クラスを表す)がある.メソッドを呼び出すオブジェクトをclsに自動的に割り当てます(clsは実際には現在のクラスを参照します).
スタティックメソッド(@staticmethod装飾)
クラスとインスタンスオブジェクトは呼び出すことができ、デフォルトのパラメータはありません.実は外部定義関数と区別がありませんが、なぜこのように定義したのかは次のように言います.
シーンの説明の適用
クラス属性は共通であり、インスタンス属性はインスタンス固有であり、属性を変更するには対応するメソッド(クラスメソッドとインスタンスメソッド)があり、静的メソッドの定義では前述したように、作用は通常の関数と変わらないが、外部で対応する静的メソッドを定義し、複数のクラスが存在する場合にこのメソッドを参照したいと仮定すると、このメソッドを定義するには曖昧さがあります(関数はどのクラスのために定義されているのか)、静的メソッドを定義する出発点は、特定のパラメータを入力する必要がなく、機能が簡単で、クラスメソッドとインスタンスメソッドが1つに分類されます.
よく理解していない場合は、以下をご覧ください.https://www.bilibili.com/video/av50979957?from=search&seid=3682306859886449416