ホームページ >バックエンド開発 >Python チュートリアル >私の Python メソッドで「TypeError:method() は位置引数を 1 つとりますが、2 つが指定されました」と表示されるのはなぜですか?

私の Python メソッドで「TypeError:method() は位置引数を 1 つとりますが、2 つが指定されました」と表示されるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-13 15:27:10516ブラウズ

Why Does My Python Method Show

謎の「メソッドは 1 つの引数を取るが、2 つの引数が与えられる」エラーを理解する

Python でメソッドを呼び出そうとすると、開発者は「TypeError」という複雑なエラー メッセージが表示されることがあります。 :method() は 1 つの位置引数を取りますが、2 つが指定されました。」このエラーは、特に引数が 1 つだけメソッドに渡された場合に、不可解になる可能性があります。

舞台裏では、Python はメソッド呼び出しを次のように解釈します。

class_name.method(object, argument)

これは、メソッドを許可するメカニズムです。操作対象のオブジェクトを楽に操作できるようになります。メソッド定義では、最初の引数は通常、オブジェクト インスタンスを参照する self という名前が付けられます。

次の例を考えてみましょう:

class MyClass:
    def method(self, arg):
        print(self)
        print(arg)

my_object = MyClass()
my_object.method("foo")

実行すると、上記のコードは次のように変換されます:

MyClass.method(my_object, "foo")

これは、メソッドによって明示的に渡されたのは 1 つだけであるにもかかわらず、メソッドが 2 つの引数を取る理由を説明しています。 caller.

この混乱を軽減するために、開発者は、バインドされているオブジェクトへのアクセスを必要としないメソッドで staticmethod() デコレーターを使用できます。このようにすると、メソッドは通常の関数のように動作し、self 引数の必要がなくなります。

class MyOtherClass:
    @staticmethod
    def method(arg):
        print(arg)

my_other_object = MyOtherClass()
my_other_object.method("foo")

要約すると、「メソッドは 1 つの引数を受け取りますが、2 つの引数が与えられます」というエラーが発生した場合は、Python では次のことを覚えておいてください。の場合、メソッドは通常、関連付けられているオブジェクトである追加の暗黙的な引数を受け取ります。この動作を慎重に検討し、必要に応じてデコレータを使用すると、混乱を防ぎ、コードを合理化できます。

以上が私の Python メソッドで「TypeError:method() は位置引数を 1 つとりますが、2 つが指定されました」と表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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