Rumah > pembangunan bahagian belakang > Tutorial Python > Apabila Kaedah Overloading Tidak Berfungsi dalam Python?

Apabila Kaedah Overloading Tidak Berfungsi dalam Python?

Patricia Arquette
Lepaskan: 2024-10-23 00:01:03
asal
546 orang telah melayarinya

When Method Overloading Doesn't Work in Python?

Pembebanan Kaedah dalam Python

Dalam Python, lebihan kaedah ialah keupayaan untuk mentakrifkan berbilang kaedah dengan nama yang sama tetapi parameter berbeza. Walau bagaimanapun, ini boleh membawa kepada beberapa tingkah laku yang tidak dijangka.

Contoh 1:

<code class="python">class A:
    def stackoverflow(self):    
        print ('first method')
    def stackoverflow(self, i):
        print ('second method', i)</code>
Salin selepas log masuk

Jika anda memanggil kaedah dengan hujah, kaedah kedua akan digunakan:

<code class="python">ob=A()
ob.stackoverflow(2)
# Output: second method 2</code>
Salin selepas log masuk

Tetapi jika anda memanggilnya tanpa hujah, Python akan menimbulkan ralat:

<code class="python">ob=A()
ob.stackoverflow()
# Output: TypeError: stackoverflow() takes exactly 2 arguments (1 given)</code>
Salin selepas log masuk

Ini kerana Python menganggap kaedah pertama sebagai tidak mempunyai hujah, bukan satu hujah lalai .

Penyelesaian:

Untuk menyelesaikan isu ini, anda boleh menggunakan nilai parameter lalai:

<code class="python">class A:
    def stackoverflow(self, i='some_default_value'):
        print('only method')</code>
Salin selepas log masuk

Kini, kedua-dua panggilan akan berfungsi:

Ini membolehkan anda memanggil keseronokan dengan jenis hujah yang berbeza dan mendapatkan tingkah laku yang sesuai:
<code class="python">ob=A()
ob.stackoverflow(2)
# Output: only method
ob.stackoverflow()
# Output: only method</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Apabila Kaedah Overloading Tidak Berfungsi dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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