質問: "てすと" @classmethod def method1(cls): """ 予想:クラスメソッド (クラスのみの参照?) """ # メンバ変数を参照=クラスだけ参照? print(cls.test) def method2(self): """ 予想:インスタンスメソッド(クラスとインスタンス両方参照?) """ # selfを使わずにクラス名.メンバ変数で呼び出し? print(TestCommon.test) # インスタンスを参照? print(self.request.POST) def method3(self): """ 予想:インスタンスメソッド(クラス参照なし?) """ print(self.request.POST) @staticmethod def method4(data): """ 予想:スタティックメソッドにすると引数エラー? """ # 引数取らない=受け取れない??? return data ``` 今の私の認識は上記のような感じになっているのですが、これは合っていますでしょうか・・・ お時間あるときで構いませんので、ご教示いただけますと幸いです・・・。 --- 教えて頂いたこの↓サイトものすごく、ものすごくわかりやすいかもしれない・・・ぽんこつにもわかる・・・ [classmethod と staticmethod ってなに?](https://python.ms/classmethod-and-staticmethod/#_2-%E3%82%B9%E3%82%BF%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89)
回答: 同じ形式のデータを沢山作るときにクラスを使います。 電話帳アプリで扱う電話帳データは一人ひとり内容が違うデータだけど、形式は同じデータ。 いろんな値の整数や、いろんな文字列も、各クラスのインスタンスです。 クラスにはデータの処理関数を書く。 インスタンスはクラスで処理するデータ。 Pythonのデータはすべて何らかのクラスのインスタンス。 クラスに定義した関数で、処理するインスタンスが必要ならインスタンスメソッドにする。 クラスに定義した関数で、処理するクラス情報が必要ならクラスメソッドにする。 クラスに定義した関数で、クラスもインスタンスも不要ならスタティックメソッドにする。 インスタンスからクラスに定義した処理関数を呼び出すことができ、インスタンスメソッドにはインスタンスが渡り、クラスメソッドにはクラスが渡り、スタティックメソッドには何も渡らない。 ``` >>> str.lower("ABC") 'abc' >>> "ABC".lower() 'abc' ``` ``` >>> class sample: ... def func1(instance): ... print("instance:", instance) ... @classmethod ... def func2(cls): ... print("class:", cls) ... @staticmethod ... def func3(): ... print("static") ... >>> s = sample() >>> s.func1() instance: <__main__.sample object at 0x6ffffd15748> >>> s.func2() class: >>> s.func3() static ```