Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Kaedah Python Saya Melemparkan Ralat 'TypeError: method() mengambil 1 hujah kedudukan tetapi 2 diberikan'?

Mengapa Kaedah Python Saya Melemparkan Ralat 'TypeError: method() mengambil 1 hujah kedudukan tetapi 2 diberikan'?

Patricia Arquette
Patricia Arquetteasal
2024-12-14 04:00:14747semak imbas

Why Does My Python Method Throw a

Memusnahkan Argumen dalam Kaedah Python: Membongkar "TypeError: method() memerlukan 1 hujah kedudukan tetapi 2 diberikan" Enigma

Apabila mencuba untuk menggunakan kaedah kelas dalam Python, anda mungkin menghadapi masalah "TypeError: method() yang membingungkan 1 hujah kedudukan tetapi 2 diberi" ralat, walaupun nampaknya hanya meluluskan satu hujah. Untuk merungkai enigma ini, mari kita mendalami tingkah laku kaedah Python dan konsep pemusnahan hujah.

Dalam Python, kaedah kelas beroperasi secara berbeza daripada rakan sejawatannya dalam beberapa bahasa pengaturcaraan. Apabila menggunakan kaedah kelas, tandatangan kaedah dalam definisi kelas mentakrifkan bilangan parameter yang dijangkakan, termasuk hujah kendiri.

Dalam coretan kod yang disediakan:

class MyClass:

    def method(arg):
        print(arg)

Kaedah menjangka hujah tunggal, yang, dari perspektif pemanggil, dihantar sebagai my_object.method("foo"). Walau bagaimanapun, Python melakukan beberapa pemusnahan sintaksis di belakang tabir sebelum kaedah itu dilaksanakan. Ia menterjemahkan sintaks pemanggil kepada:

MyClass.method(my_object, "foo")

Seperti yang anda lihat, kaedah ini menjangkakan dua hujah:

  • my_object, yang merujuk kepada contoh di mana kaedah dipanggil .
  • arg, yang menerima hujah yang disediakan pemanggil, dalam kes ini, "foo".

Python membekalkan hujah pertama secara automatik kepada kaedah, iaitu objek itu sendiri. Inilah sebabnya mengapa anda menerima mesej ralat apabila pemanggil anda cuba menyampaikan hujah tambahan, menghasilkan dua hujah.

Untuk kaedah yang perlu mengakses contoh yang dimilikinya, hujah kendiri adalah penting . Ia membenarkan kaedah untuk berinteraksi dengan data khusus contoh atau melaksanakan tugas yang berkaitan dengan keadaan objek.

Untuk mengendalikan kes di mana akses kepada tika itu tidak diperlukan, Python menyediakan penghias @staticmethod. Penghias ini menyekat hantaran tersirat hujah kendiri.

Seperti yang ditunjukkan dalam coretan kod yang disediakan:

class MyOtherClass:

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

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

Kaedah dalam MyOtherClass tidak memerlukan akses kepada contoh, membenarkan anda untuk panggilnya tanpa memberikan hujah sendiri.

Memahami tingkah laku kaedah kelas dan pemusnahan hujah ialah penting untuk menyelesaikan jenis ralat ini dan menulis kod teguh dalam Python.

Atas ialah kandungan terperinci Mengapa Kaedah Python Saya Melemparkan Ralat 'TypeError: method() mengambil 1 hujah kedudukan tetapi 2 diberikan'?. 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