ホームページ  >  記事  >  バックエンド開発  >  Pythonのクラスメソッドと静的メソッドの違い

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

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-06-24 10:18:333198ブラウズ

Python はクラス メソッドの定義を完全にサポートし、静的メソッドの定義もサポートします。 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 サイトの他の関連記事を参照してください。

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