デコレータ @staticmethod と @classmethod の違いは次のとおりです。@staticmethod は self パラメータと cls パラメータを必要としません。@classmethod は self パラメータを必要としませんが、cls パラメータが必要です。
一般に、クラスのメソッドを使用するときは、最初にクラスをインスタンス化し、次にインスタンス化されたクラスを使用してそのメソッドを呼び出す必要があります
class Test(object): """docstring for Test""" def __init__(self, arg=None): super(Test, self).__init__() self.arg = arg def say_hi(self): print 'hello wrold' def main(): test = Test() //1. 首先实例化test类 test.say_hi() //2. 再调用类的方法 if __name__ == '__main__': main()
@staticmethod または @classmethod を使用する場合、インスタンス化せずにクラス名.メソッド名()で直接呼び出すことができます。
これは、コードを整理し、特定のクラスに属する特定の関数をそのクラスに配置するのに役立ち、また、名前空間を整理しておくのにも役立ちます。
class Test(object): """docstring for Test""" def __init__(self, arg=None): super(Test, self).__init__() self.arg = arg def say_hi(self): print 'hello wrold' @staticmethod def say_bad(): print 'say bad' @classmethod def say_good(cls): print 'say good' def main(): test = Test() test.say_hi() Test.say_bad() //直接类名.方法名()来调用 Test.say_good() //直接类名.方法名()来调用 if __name__ == '__main__': main()
@staticmethod と @classmethod
の違いは、クラスの通常のメソッドであり、1 つのパラメーターはそれ自体を表す self パラメーターを必要とします。
@staticmethod は、関数を使用する場合と同様に、独自のオブジェクトの self や独自のクラスの cls パラメーターを表す必要はありません。
@classmethod には self パラメータは必要ありませんが、最初のパラメータは独自のクラスを表す cls パラメータである必要があります。
以上がデコレータ @staticmethod と @classmethod の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。