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
Lepaskan: 2024-12-14 04:00:14
asal
807 orang telah melayarinya

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)
Salin selepas log masuk

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")
Salin selepas log masuk

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")
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan