Fungsi yang berlebihan mungkin tidak dibangun ke dalam Python, tetapi ada cara untuk menirunya.
Kelebihan fungsi adalah fitur dalam beberapa bahasa pemrograman yang memungkinkan Anda menentukan variasi fungsi yang sama. Setiap varian memiliki nama yang sama, namun implementasinya berbeda, dengan tanda fungsi yang unik.
Teknik ini memungkinkan Anda melakukan operasi berbeda berdasarkan jenis dan jumlah argumen yang diteruskan ke suatu fungsi.
Berbeda dengan bahasa seperti C++ dan Java, Python tidak mendukung fungsi yang berlebihan secara default, namun ada cara untuk mencapai fungsionalitas serupa.
Bagaimana Python Menangani Fungsi yang Berlebihan?
Dengan Python, Anda dapat mendefinisikan fungsi yang sama lebih dari satu kali dengan parameter, tipe data, atau keduanya yang berbeda di setiap definisi. Namun, Python hanya akan mengenali definisi terakhir dari fungsi tersebut saat Anda memanggilnya. Berikut ini contohnya:
defarithmetics(a, b):
return a - bdefarithmetics(a, b, c, d):
return a + b - c * d
print(arithmetics(1, 2, 3, 5)) # returns -12
print(arithmetics(1, 2)) # returns missing positional arguments error
Bahasa berorientasi objek, seperti Java, sering kali mendukung kelebihan fungsi dan metode. Metode hanyalah sebuah fungsi yang Anda definisikan di dalam kelas.
Dalam kode di atas, Python hanya akan mengenali definisi kedua dari aritmatika() berfungsi ketika Anda mencoba memanggilnya di proyek Anda. Jika Anda mencoba memanggil fungsi dengan dua argumen seperti yang didefinisikan pertama kali, Anda akan mendapatkan kesalahan yang mengatakan, "argumen posisi yang diperlukan tidak ada".
Anda tidak akan mendapatkan kesalahan saat memanggil fungsi dengan empat argumen. Ini berarti Python telah menimpa fungsi tersebut dengan instance terbarunya. Ini bukanlah perilaku kelebihan beban, jadi Anda harus mengatasinya.
Jadi, Python tidak menangani kelebihan fungsi secara default, tetapi ada beberapa trik yang dapat Anda gunakan untuk mensimulasikan perilakunya di program Anda.
Metode 1: Menggunakan Parameter Opsional atau Argumen Default
Anda dapat mencapai kelebihan beban dengan mendefinisikan fungsi dengan argumen default. Berikut ini contohnya:
defarithmetics(a, b=0, c=0):
Arguments:
a: The first number.
b: The second number (optional).
c: The third number (optional).
return a - b + c
Fungsi ini memiliki tiga parameter, namun dua di antaranya memiliki nilai default. Ini berarti Anda dapat memanggilnya dengan satu hingga tiga argumen:
print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns -3
print(arithmetics(10, 3, 4)) # returns 11
Meskipun pendekatan ini memungkinkan Anda memanggil fungsi dengan beberapa cara berbeda, pendekatan ini tidak terlalu efektif dalam jangka panjang. Berikut beberapa batasannya:
- Anda hanya dapat meneruskan argumen berupa bilangan bulat atau float.
- Tidak ada perubahan signifikan pada perilaku fungsinya. Misalnya, Anda tidak dapat mengubah perilakunya untuk menghitung luas suatu bentuk atau bahkan mencetak Halo Dunia.
Metode 2: Menggunakan Argumen Variabel
Untuk menggunakan argumen variabel untuk kelebihan fungsi di Python, Anda harus melakukannya sertakan parameter args saat mendefinisikan fungsi Anda. Itu argumen parameter memungkinkan Anda meneruskan beberapa argumen posisi saat memanggil fungsi Anda. Berikut ini contohnya:
defarithmetics(a, *args):
Arguments:
a: The first number.
*args: A variable number of arguments (optional).
args_sum = 0for num in args:
args_sum *= numreturn a - args_sum
print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns 2
print(arithmetics(10, 3, 4, 2, 4, 6)) # returns 10
Fungsi di atas membutuhkan dua argumen: argumen wajib disebut A dan itu argumen argumen, yang memungkinkan Anda memasukkan argumen sebanyak yang Anda perlukan.
Meskipun memerlukan banyak argumen, fungsi di atas hanya dapat melakukan operasi perkalian pada argumen variabel, yaitu argumen yang diwakili oleh argumen kata kunci.
Jika Anda ingin melakukan banyak operasi, Anda harus melakukannya memperkenalkan pernyataan kondisional ke kode Anda, dan ini bisa menjadi rumit dengan cepat.
Metode 3: Menggunakan Dekorator Pengiriman Berganda
Dekorator pengiriman ganda adalah pustaka Python yang memungkinkan Anda menentukan beberapa implementasi atau instance dari satu fungsi, berdasarkan tipe argumennya. Ini berarti Anda dapat mendefinisikan fungsi yang sama dengan tipe data berbeda dan mengubah perilakunya sepenuhnya.
Untuk menggunakan dekorator beberapa pengiriman, ikuti langkah-langkah berikut:
- Install jalur ganda di lingkungan Python Anda:
pip install multipledispatch
- Hiasi fungsi Anda dengan @menugaskan penghias. Itu @menugaskan dekorator adalah a Dekorator python yang memungkinkan Anda menerapkan banyak pengiriman. Ini akan secara otomatis mengirimkan fungsi yang sesuai berdasarkan argumen yang Anda berikan padanya. Anda dapat menggunakan @menugaskan dekorator dengan mengikuti pola ini:
from multipledispatch import dispatch
@dispatch(data type1, data type2, data typeX)
defyour_function(a, b, c, x):
pass
# perform your operations here
Berikut ini contoh yang menggunakan dekorator pengiriman ganda untuk kelebihan beban fungsi dengan Python:
from multipledispatch import dispatch
@dispatch(int, int)
defadd(a, b):
Arguments:
a: Any integer.
b: Any integer.
return a + b@dispatch(int, list)
defadd(a, b):
Arguments:
a: Any integer.
b: Any Python list.
b.append(a)
return b# returns 3
print(add(1, 2))
# returns [2, 3, 4, 5, 'w', 'done', 1]
print(add(1, [2, 3, 4, 5, 'w', 'done']))
Cuplikan kode di atas mendefinisikan dua contoh menambahkan() fungsi. Contoh pertama mengambil dua bilangan bulat sebagai argumennya dan mengembalikan jumlahnya.
Sementara itu, versi kedua dari fungsi ini menggunakan bilangan bulat dan daftar. Itu menambahkan bilangan bulat ke daftar dan mengembalikan daftar baru.
Pendekatan terhadap fungsi yang berlebihan dengan Python ini memberi Anda banyak fleksibilitas, terutama jika Anda perlu mengubah perilaku metode Anda. Anda dapat mempelajari lebih lanjut dari beberapa dokumentasi pengiriman.
Pendekatan Terbaik Terhadap Fungsi Overloading dengan Python
Pendekatan yang Anda ambil untuk memfungsikan kelebihan beban harus bergantung pada apa yang ingin Anda capai. Jika Anda dapat menyelesaikan tugas Anda menggunakan argumen default atau variabel, maka dekorator beberapa pengiriman mungkin berlebihan. Namun, dekorator pengiriman ganda biasanya merupakan pilihan terbaik karena efisiensi dan keakuratannya.
Dekorator ini menyediakan cara yang bersih dan fleksibel untuk mengimplementasikan fungsi yang berlebihan dengan Python. Ini memungkinkan Anda menentukan beberapa implementasi dari satu fungsi berdasarkan jenis argumennya.
Dengan pendekatan ini, Anda dapat membuat fungsi fleksibel yang dapat menerima tipe parameter berbeda tanpa memerlukan pernyataan kondisional yang rumit.