Python メソッドの引数の構造化: 「TypeError:method() は位置引数を 1 つとりますが、2 つが与えられました」を解明する Enigma
試行時Python でクラス メソッドを呼び出すと、「TypeError:method() は引数を 1 つだけ渡しているように見えるにもかかわらず、位置引数が 1 つありますが、2 つが与えられました」というエラーが発生します。この謎を解明するために、Python メソッドの動作と引数の構造化の概念を詳しく調べてみましょう。
Python では、クラス メソッドは一部のプログラミング言語のクラス メソッドとは異なる動作をします。クラス メソッドを呼び出すとき、クラス定義内のメソッド シグネチャは、self 引数を含む、予期されるパラメーターの数を定義します。
提供されたコード スニペットでは、
class MyClass: def method(arg): print(arg)
メソッドは次のことを予期します。単一の引数。呼び出し側の観点からは、my_object.method("foo") として渡されます。ただし、Python はメソッドが実行される前に、舞台裏で構文の構造化を実行します。呼び出し元の構文は次のように変換されます:
MyClass.method(my_object, "foo")
ご覧のとおり、メソッドは 2 つの引数を期待しています:
Python は、オブジェクト自体である最初の引数をメソッドに自動的に提供します。呼び出し元が追加の引数を渡そうとし、合計 2 つの引数を渡そうとするとエラー メッセージが表示されるのはこのためです。
メソッドが属するインスタンスにアクセスする必要があるメソッドの場合、self 引数は必須です。 。これにより、メソッドがインスタンス固有のデータと対話したり、オブジェクトの状態に関連するタスクを実行したりできるようになります。
インスタンスへのアクセスが必要ない場合を処理するために、Python は @staticmethod デコレーターを提供します。このデコレータは、self 引数の暗黙的な受け渡しを抑制します。
提供されたコード スニペットに示されているように、
class MyOtherClass: @staticmethod def method(arg): print(arg) my_other_object = MyOtherClass() my_other_object.method("foo")
MyOtherClass のメソッドはインスタンスへのアクセスを必要とせず、次のことが可能です。 self 引数を渡さずに呼び出してください。
このタイプのエラーを解決し、堅牢なコードを作成するには、クラス メソッドの動作と引数の構造化を理解することが重要です。パイソン。
以上が私の Python メソッドが「TypeError:method() は位置引数を 1 つとりますが、2 つが与えられました」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。