Python の @staticmethod デコレータと @classmethod デコレータの違いを理解する
Python の @staticmethod デコレータと @classmethod デコレータを使用すると、クラスを作成できます異なる動作を持つ -level メソッド。主な違いの詳細な説明は次のとおりです。
呼び出し規約:
メソッド シグネチャ:
インスタンス化:
実際の例:
を検討してください次のコード スニペット:
class A(object): def foo(self, x): print("executing foo({self}, {x})") @classmethod def class_foo(cls, x): print("executing class_foo({cls}, {x})") @staticmethod def static_foo(x): print("executing static_foo({x})") a = A()
foo を呼び出すと、インスタンス a は暗黙的に最初の引数として渡されます:
a.foo(1) # executing foo(<__main__.A object at 0xb7dbef0c>, 1)
クラス メソッドでは、インスタンスのクラスが自分自身ではなく暗黙的に渡されます:
a.class_foo(1) # executing class_foo(<class '__main__.A'>, 1)
静的メソッドは暗黙的に何も受け取りません引数:
a.static_foo(1) # executing static_foo(1)
概要:
以上がPython の「@staticmethod」と「@classmethod」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。