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

Python クラス設計における「@classmethod」と「@staticmethod」の違いは何ですか?

Barbara Streisand
リリース: 2024-12-22 12:40:41
オリジナル
493 人が閲覧しました

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

クラス設計における @classmethod と @staticmethod の重要性を理解する

Python では、@classmethod と @staticmethod は追加機能を提供するデコレーターですメソッドと関数をクラス化します。これらのデコレータは、メソッドを特定のインスタンスではなくクラスに関連付けることができるようにすることで、コードの再利用性と編成を強化します。

@classmethod

@classmethod デコレータは、クラス メソッドを示します。最初のパラメータとしてクラス参照が必要です。クラス メソッドはクラス内で定義されますが、その使用目的は主に、クラスのインスタンスではなく、クラス自体を操作することです。これらにはいくつかの利点があります。

  • クラスの継承: クラス メソッドはサブクラスによって継承され、同じメソッドを再定義することなく、複数のクラスに共通の機能を追加する便利な方法を提供します。各派生クラス。
  • ファクトリのような機能: クラス メソッドはファクトリとして機能できます。
  • Dependency Injection: クラス メソッドを依存関係注入の手段として利用できるため、テストと柔軟性が容易になります。クラス変更で依存関係。

@staticmethod

@staticmethod デコレータは静的メソッドを示します。これは、本質的にはクラスまたはそのインスタンスとの接続を持たない通常の関数です。 。これにはパラメータは必要なく、クラス固有の操作には関与しません。

@classmethod および @staticmethod をいつ使用するか、どのように使用するか

いつ、どのように使用するかを決定する@classmethod と @staticmethod は、実行される特定の機能に依存します。実装されている:

  • 次の場合に @classmethod を使用します:

    • メソッドはインスタンスではなくクラス自体を操作する必要があります。
    • クラスのオブジェクトを作成するファクトリ メソッドを定義したいとします。
    • クラス共通の機能を提供するには継承が必要です。
  • 次の場合に @staticmethod を使用します。

    • メソッドは純粋に機能的であり、次の場合に使用します。クラスまたはインスタンスでは操作できません。
    • 論理的に関連付けられたヘルパー関数またはユーティリティ関数を作成する必要がありますクラスを使用しますが、クラス固有の属性やメソッドにはアクセスしません。

例:

次のコードを考えてみましょう:

class Person:
    def __init__(self, name):
        self.name = name

    @classmethod
    def from_str(cls, name_str):
        return cls(name_str)

    @staticmethod
    def is_valid_name(name):
        return len(name) > 0
ログイン後にコピー

@classmethod from_str メソッドは文字列から Person オブジェクトを作成します。 @staticmethod is_valid_name メソッドは、名前の有効性をチェックします。 is_valid_name は、特定のインスタンスまたはクラス全体のデータへのアクセスを必要としないアクションを実行するため、静的メソッドとして適切に装飾されます。

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

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