Python はクラス メソッドの定義を完全にサポートし、静的メソッドの定義もサポートします。 Python のクラス メソッドは静的メソッドに非常に似ており、どちらもクラスを使用して呼び出すことが推奨されています (実際には、オブジェクトを使用して呼び出すこともできます)。
クラス メソッドと静的メソッドの違い
Python では、クラス メソッドの最初のパラメーターが自動的にバインドされます。クラス メソッドの最初のパラメーター (通常はcls) という名前のパラメータはクラス自体に自動的にバインドされることをお勧めしますが、静的メソッドの場合は自動的にバインドされません。
@classmethod で変更されたメソッドはクラス メソッドであり、@staticmethod で変更されたメソッドは静的メソッドです。
関連する推奨事項: 「Python ビデオ チュートリアル 」
次のコードは、クラス メソッドと静的メソッドの定義を示しています。
class Bird: # classmethod修饰的方法是类方法 @classmethod def fly (cls): print('类方法fly: ', cls) # staticmethod修饰的方法是静态方法 @staticmethod def info (p): print('静态方法info: ', p) # 调用类方法,Bird类会自动绑定到第一个参数 Bird.fly() #① # 调用静态方法,不会自动绑定,因此程序必须手动绑定第一个参数 Bird.info('crazyit') # 创建Bird对象 b = Bird() # 使用对象调用fly()类方法,其实依然还是使用类调用, # 因此第一个参数依然被自动绑定到Bird类 b.fly() #② # 使用对象调用info()静态方法,其实依然还是使用类调用, # 因此程序必须为第一个参数执行绑定 b.info('fkit')
上の太字のコードからわかるように、@classmethod で変更されたメソッドはクラス メソッドです。このクラス メソッドは cls パラメータを定義しており、プログラムがそれを使用して呼び出すかどうかに関係なく、自動的に Bird クラス自体にバインドされます。メソッド、Python は常にクラス メソッドの最初のパラメーターをクラス自体にバインドします (コード 1 と 2 の実行効果など)。
上記のプログラムでは、@staticmethod を使用して静的メソッドを定義しています。プログラムは、クラスを使用して静的メソッドを呼び出すことも、オブジェクトを使用して静的メソッドを呼び出すこともできます。どのメソッドが使用されるかに関係なく、Python は静的メソッドの自動バインディングを実行しません。確かに。
Python でプログラミングする場合、通常はクラス メソッドや静的メソッドを使用する必要はなく、プログラムではクラス メソッドや静的メソッドの代わりに関数を使用できます。ただし、特殊なシナリオ (ファクトリ パターンの使用など) では、クラス メソッドまたは静的メソッドも適切な選択肢となります。
以上がPythonのクラスメソッドと静的メソッドの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。