Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Kaedah Python Saya Melemparkan Ralat 'TypeError: method() mengambil 1 hujah kedudukan tetapi 2 diberikan'?
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:
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!