ホームページ > バックエンド開発 > Python チュートリアル > デコレータ @staticmethod と @classmethod の違いは何ですか

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

anonymity
リリース: 2020-09-17 16:40:08
オリジナル
6529 人が閲覧しました

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート