Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa 'TypeError: method() mengambil 1 hujah kedudukan tetapi 2 telah diberikan' Berlaku Walaupun dengan Satu Hujah Eksplisit?

Mengapa 'TypeError: method() mengambil 1 hujah kedudukan tetapi 2 telah diberikan' Berlaku Walaupun dengan Satu Hujah Eksplisit?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-30 13:25:10579semak imbas

Why Does

"TypeError: method() mengambil 1 hujah kedudukan tetapi 2 diberikan" dengan Hanya Satu Argumen Lulus

Apabila menghadapi ralat "TypeError : method() mengambil 1 hujah kedudukan tetapi 2 diberikan" walaupun hanya meluluskan satu hujah, penting untuk difahami Konvensyen panggilan kaedah Python.

Dalam Python, panggilan kaedah ialah gula sintaksis untuk sintaks yang lebih bertele-tele. Apabila memanggil kaedah pada objek, bahasa menterjemahkan panggilan ke dalam bentuk yang lebih jelas, dengan objek tersebut menjadi hujah pertama kepada kaedah tersebut.

Sebagai contoh, panggilan berikut:

my_object.method("foo")

diterjemahkan di sebalik tabir kepada:

MyClass.method(my_object, "foo")

Di sini, hujah pertama (objek_saya) dipanggil parameter diri dalam takrif kaedah. Parameter ini mewakili objek yang kaedah dipanggil.

Dalam kebanyakan kes, kaedah memerlukan akses kepada objek yang mereka panggil. Tetapi kadangkala, anda mungkin mahukan kaedah yang tidak bergantung pada objek yang terikat kepadanya. Dalam kes sedemikian, anda boleh menggunakan fungsi staticmethod() Python untuk menghiasi kaedah:

class MyOtherClass:

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

Menghiasi kaedah dengan staticmethod() menghapuskan keperluan untuk parameter diri, membolehkan anda memanggil kaedah secara terus tanpa merujuk objek:

my_other_object.method("foo")

Ini menjelaskan sebab ralat yang anda temui menyatakan bahawa dua hujah telah disediakan. Python sedang mentafsir objek yang anda panggil kaedah (cth., my_object dalam contoh asal) sebagai hujah pertama yang tersirat, menyebabkan sejumlah dua hujah diluluskan.

Atas ialah kandungan terperinci Mengapa 'TypeError: method() mengambil 1 hujah kedudukan tetapi 2 telah diberikan' Berlaku Walaupun dengan Satu Hujah Eksplisit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn