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

Python の「@classmethod」と「@staticmethod」の違いは何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-22 10:16:46229ブラウズ

What's the Difference Between `@classmethod` and `@staticmethod` in Python?

初心者のための @classmethod と @staticmethod の意味と使い方

Python では、@classmethod と @staticmethod はメソッドを定義するために使用されるデコレータです。特定のcharacteristics.

@classmethod

クラスメソッドは、クラスの個々のインスタンスではなく、クラスにバインドされるメソッドです。最初の引数としてクラスを指定する必要があり、通常は cls という名前が付けられます。慣例により、クラスメソッドの名前には from_ または create_ という接頭辞が付けられます。

@classmethod を使用する場合:

  • を返すファクトリ メソッドを作成する場合クラスの新しいインスタンス。
  • クラスではなくクラス自体を操作するメソッドを定義したい場合インスタンス。

例:

class Date:
    def __init__(self, day, month, year):
        self.day = day
        self.month = month
        self.year = year

    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return cls(day, month, year)

@staticmethod

静的メソッドは、次のメソッドです。クラスにもインスタンスにもバインドされません。インスタンス変数やクラス変数にはアクセスできません。静的メソッドは通常、変更せずに再利用できるユーティリティ関数に使用されます。

@staticmethod を使用する場合:

  • 実行する関数を定義する場合何らかの操作を行うが、クラスやインスタンスの状態に依存しない
  • 呼び出し可能な関数を作成したい場合

例:

class Date:
    @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return day <= 31 and month <= 12 and year <= 3999

@classmethod と @staticmethod の違い

Feature @classmethod @staticmethod
Access to class Has access to the class No access to the class
Access to instance No access to instances No access to instances
Usage Factory methods, operations on the class Utility functions, independent of class or instances

以上がPython の「@classmethod」と「@staticmethod」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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