首頁 >後端開發 >Python教學 >為什麼我的 Python 方法會拋出「TypeError:method() 需要 1 個位置參數,但給了 2 個」錯誤?

為什麼我的 Python 方法會拋出「TypeError:method() 需要 1 個位置參數,但給了 2 個」錯誤?

Patricia Arquette
Patricia Arquette原創
2024-12-14 04:00:14747瀏覽

Why Does My Python Method Throw a

Python 方法中的解構參數:解開「TypeError:method() 需要1 個位置參數,但給了2 個」之謎

嘗試時要在Python 中呼叫類別方法,您可能會遇到令人困惑的「TypeError:method()需要 1 個位置參數,但是2 被給予」錯誤,儘管看起來只傳遞了一個參數。為了解開這個謎團,讓我們深入研究 Python 方法的行為和參數解構的概念。

在 Python 中,類別方法的操作方式與某些程式語言中的對應方法不同。當呼叫類別方法時,類別定義中的方法簽章定義了它期望的參數數量,包括 self 參數。

在提供的程式碼片段中:

class MyClass:

    def method(arg):
        print(arg)

該方法期望單一參數,從呼叫者的角度來看,它作為 my_object.method("foo") 傳入。然而,Python 在執行方法之前會在幕後執行一些語法解構。它將呼叫者的語法轉換為:

MyClass.method(my_object, "foo")

如您所見,該方法需要兩個參數:

  • my_object,它指的是呼叫該方法的實例.
  • arg,接收呼叫者提供的參數,在本例中, "foo".

Python 自動提供方法第一個參數,即物件本身。這就是為什麼當您的呼叫者嘗試傳遞附加參數時您會收到錯誤訊息,導致總共有兩個參數。

對於需要存取其所屬實例的方法, self 參數是必不可少的。它允許方法與特定於實例的資料互動或執行與物件狀態相關的任務。

為了處理不需要存取實例的情況,Python 提供了 @staticmethod 裝飾器。這個裝飾器抑制了 self 參數的隱式傳遞。

如提供的程式碼片段所示:

class MyOtherClass:

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

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

MyOtherClass 中的方法不需要存取實例,允許您呼叫它而不傳遞 self 參數。

理解類別方法和參數解構的行為對於解決此類錯誤和編寫健全的程式碼至關重要在 Python 中。

以上是為什麼我的 Python 方法會拋出「TypeError:method() 需要 1 個位置參數,但給了 2 個」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn