logo

Python のクラスメソッドと静的メソッド

この記事では基本的なことについて説明します クラスメソッドと静的メソッドの違い Python と クラスメソッドと静的メソッドをいつ使用するか パイソンで。

Pythonのクラスメソッドとは何ですか? 

@classmethod デコレーターは組み込みです 関数デコレータ これは、関数が定義された後に評価される式です。その評価の結果は、関数定義に影を落とします。 あ クラスメソッド インスタンスメソッドがインスタンスを受け取るのと同じように、クラスを暗黙の最初の引数として受け取ります。 

構文 Python クラス メソッド:  



    class C(object):         @classmethod         def fun(cls arg1 arg2 ...):    ....     fun:    function that needs to be converted into a class method     returns:    a class method for function.
  • クラスメソッドは、 クラス クラスのオブジェクトではありません。
  • クラスのすべてのインスタンスに適用されるクラス状態を変更できます。たとえば、すべてのインスタンスに適用されるクラス変数を変更できます。

Pythonの静的メソッドとは何ですか?

静的メソッド 暗黙的な最初の引数を受け取りません。静的メソッドは、クラスのオブジェクトではなくクラスにバインドされるメソッドでもあります。このメソッドはクラスの状態にアクセスしたり、クラスの状態を変更したりすることはできません。このメソッドがクラス内に存在するのは理にかなっているため、クラス内に存在します。

構文 Python 静的メソッド:  

    class C(object):         @staticmethod         def fun(arg1 arg2 ...):         ...        returns:    a static method for function fun.

クラスメソッドと静的メソッド

Class メソッドと静的メソッドの違いは次のとおりです。

  • クラス メソッドは最初のパラメータとして cls を受け取りますが、静的メソッドは特定のパラメータを必要としません。
  • クラス メソッドはクラスの状態にアクセスしたり変更したりできますが、静的メソッドはクラスの状態にアクセスしたり変更したりすることはできません。
  • 一般に、静的メソッドはクラスの状態について何も知りません。これらは、いくつかのパラメータを受け取り、それらのパラメータに基づいて動作するユーティリティ タイプのメソッドです。一方、クラスメソッドにはパラメータとしてクラスが必要です。
  • Python で @classmethod デコレータを使用してクラス メソッドを作成し、@staticmethod デコレータを使用して Python で静的メソッドを作成します。

クラスまたは静的メソッドをいつ使用するか?

  • ファクトリ メソッドを作成するには、通常、クラス メソッドを使用します。ファクトリ メソッドは、さまざまなユースケースのクラス オブジェクト (コンストラクターに似た) を返します。
  • 通常、ユーティリティ関数を作成するには静的メソッドを使用します。

クラスメソッドと静的メソッドを定義するにはどうすればよいですか?

Python でクラス メソッドを定義するには @classmethod デコレータを使用し、静的メソッドを定義するには @staticmethod デコレータを使用します。 
両方の違いを理解するために例を見てみましょう。クラス person を作成するとします。現在、Python は次のようなメソッドのオーバーロードをサポートしていません C++ または ジャワ したがって、クラスメソッドを使用してファクトリメソッドを作成します。以下の例では、クラス メソッドを使用して、誕生年から人物オブジェクトを作成します。

上で説明したように、静的メソッドを使用してユーティリティ関数を作成します。以下の例では、静的メソッドを使用して、人が成人かどうかを確認します。 

ユーザー名とは何ですか

簡単な例を 1 つ示します。

クラスメソッド:

Python
class MyClass: def __init__(self value): self.value = value def get_value(self): return self.value # Create an instance of MyClass obj = MyClass(10) # Call the get_value method on the instance print(obj.get_value()) # Output: 10 

出力
10

静的メソッド:-

Python
class MyClass: def __init__(self value): self.value = value @staticmethod def get_max_value(x y): return max(x y) # Create an instance of MyClass obj = MyClass(10) print(MyClass.get_max_value(20 30)) print(obj.get_max_value(20 30)) 

出力
30 30

以下は完全な実装です 

Python3
# Python program to demonstrate # use of class method and static method. from datetime import date class Person: def __init__(self name age): self.name = name self.age = age # a class method to create a Person object by birth year. @classmethod def fromBirthYear(cls name year): return cls(name date.today().year - year) # a static method to check if a Person is adult or not. @staticmethod def isAdult(age): return age > 18 person1 = Person('mayank' 21) person2 = Person.fromBirthYear('mayank' 1996) print(person1.age) print(person2.age) # print the result print(Person.isAdult(22)) 

出力:

21 25 True

補助スペース: ○(1)

クイズの作成