ホームページ  >  記事  >  バックエンド開発  >  デコレータ @staticmethod と @classmethod の違いは何ですか

デコレータ @staticmethod と @classmethod の違いは何ですか

anonymity
anonymityオリジナル
2019-05-24 14:58:206423ブラウズ

デコレータ @staticmethod と @classmethod の違いは次のとおりです。@staticmethod は self パラメータと cls パラメータを必要としません。@classmethod は self パラメータを必要としませんが、cls パラメータが必要です。

デコレータ @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'
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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。