Pengertian Overloading
Overloading –dalam dunia pemrograman– adalah teknik untuk mengatur berbagai perilaku dari suatu fungsi berdasarkan dengan parameter yang diterimanya, atau perilaku objek berdasarkan dengan operator yang sedang dioperasikan [1]. Satu fungsi atau satu objek bisa memiliki perilaku yang berbeda-beda tergantung dengan kondisi yang ia terima.
Pada pertemuan ini, kita akan lebih fokus terhadap operator overloading.
Apa itu Operator Overloading?
Operator overloading adalah teknik di mana kita akan mengatur atau mendefinisikan perilaku sebuah kelas (yang kita buat), bagaimana ia akan berinteraksi dengan berbagai macam operator yang berbeda.
Kita ambil contoh operator +
.
Operator +
di dalam python memiliki lebih dari satu peran tergantung tipe data dari operan yang diterima.
Misal kita operasikan operator +
terhadap nilai int
, ia akan melakukan operasi penjumlahan.
Contoh:
>>> 10 + 20
30
>>>
Dan jika kita operasikan terhadap dua buah string atau lebih, ia akan melakukan operasi “penggabungan”.
Perhatikan contoh berikut:
>>> 'Indo' + 'nesia'
'Indonesia'
>>>
Hal ini karena operator +
telah di-“overloaded” di kelas int
dan kelas str
sehingga memiliki perilaku yang berbeda.
Membuat Operator Overloading
Nah, pertanyaannya adalah: bagaimana kita bisa menentukan aksi suatu kelas jika kelas yang kita buat tersebut dijadikan sebagai operan dari suatu operator?
Misalkan kita memiliki kelas seperti berikut:
class Angka:
def __init__(self, angka):
self.angka = angka
Lalu kita ingin menambahkan dua buah instance dari kelas Angka
:
>>> x1 = Angka(10)
>>> x2 = Angka(20)
>>>
>>> x1 + x2
Yang ada justru kita mendapatkan error:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'Angka' and 'Angka'
Error di atas menyatakan kalau kelas Angka
tidak bisa menjadi operand dari operator +
.
Untuk membuatnya, kita harus mendefinisikan magic method bernama __add__()
seperti berikut:
class Angka:
def __init__(self, angka):
self.angka = angka
def __add__(self, objek):
return self.angka + objek.angka
Ketika kita panggil:
x1 = Angka(10)
x2 = Angka(20)
print(x1 + x2)
Kita akan mendapatkan output:
30
Atau kita juga bisa me-return instan baru dari kelas Angka
agar hasilnya tetap konsisten seperti berikut:
class Angka:
def __init__(self, angka):
self.angka = angka
def __add__(self, objek):
return Angka(
self.angka + objek.angka
)
Ketika dipanggil:
x1 = Angka(5)
x2 = Angka(20)
x3 = x1 + x2
print(x3.angka)
Output:
25
Daftar Fungsi Untuk Operator Aritmatika
Selain fungsi __add__
untuk menangani operator +
, kita juga bisa menggunakan berbagai fungsi lain untuk menangani berbagai operator.
Lebih jelasnya silakan perhatikan tabel berikut:
Operator | Nama Fungsi |
---|---|
+ | __add__() |
- | __sub__() |
* | __mul__() |
/ | __truediv__() |
// | __floordiv__() |
% | __mod __() |
** | __pow__() |
» | __rshift__() |
« | __lshift__() |
& | __and__() |
| | __or__() |
^ | __xor__() |
Menangani Operator Perbandingan
Selain operator aritmatika, python juga menyediakan magic method untuk menangani operator perbandingan seperti operator lebih dari (>
), kurang dari (<
), operator sama dengan (==
) dan lain sebagainya.
Untuk operator perbandingan lebih dari, kita bisa menggunakan fungsi __gt__
yang merupakan singkatan dari greater than.
Untuk operator kurang dari, kita bisa menggunakan fungsi __lt__
yang merupakan singkatan dari less than.
Dan untuk operator sama dengan, kita bisa menggunakan fungsi __eq__
yang merupakan singkatan dari equal.
Perhatikan contoh berikut:
class Angka:
def __init__(self, angka):
self.angka = angka
def __gt__(self, objek):
return self.angka > objek.angka
def __lt__(self, objek):
return self.angka < objek.angka
def __eq__(self, objek):
return self.angka == objek.angka
Kemudian kita bisa membandigkan antar dua objek dari kelas Angka
seperti berikut:
x1 = Angka(20)
x2 = Angka(10)
print(x1 > x2)
print(x1 < x2)
print(x1 == x2)
Output:
True
False
False
Daftar Fungsi Untuk Operator Komparasi
Untuk daftar lengkap nama fungsi + operator komparasi yang sesuai, silakan perhatikan tabel berikut:
Operator | Nama Fungsi |
---|---|
< | __lt__() |
> | __gt__() |
<= | __le__() |
>= | __ge__() |
== | __eq__() |
!= | __ne__() |
Daftar Fungsi Untuk Operator Assignment
Selain operator aritmatika seperti penjumlahan (+
) dan pengurangan (-
), kita juga bisa melakukan operator overloading untuk operator shortcut assignment.
Perhatikan tabel berikut:
Operator | Nama Fungsi |
---|---|
-= | __isub__() |
+= | __iadd__() |
*= | __imul__() |
/= | __idiv__() |
//= | __ifloordiv__() |
%= | __imod__() |
**= | __ipow__() |
»= | __irshift__() |
«= | __ilshift__() |
&= | __iand__() |
|= | __ior__() |
^= | __ixor__() |
Kesimpulan
Setelah mempelajari konsep OOP pada python, kita jadi tahu bahwa semua hal pada python adalah objek. Bahkan tipe data asli seperti int
dan str
pun juga termasuk objek.
Hal itu membuat kita –sebagai programmer– bisa membuat tipe data kita sendiri.
Dan setelah membuat tipe data sendiri, kita bisa melakukan teknik operator overloading untuk mengatur bagaimana objek yang kita buat akan bereaksi terhadap suatu operator tertentu.
Teknik operator overloading sendiri bisa kita implementasikan untuk berbagai operator: di antaranya operator aritmatika, perbandingan, dan juga operator penugasan (assignment).
Kode Program Lengkap
Untuk kode program lengkap pada pertemuan kali ini, kalian bisa mendapatkannya di sini.
Pertemuan Selanjutnya
Pada pertemuan selanjutnya insyaallah kita akan membahas tentang magic method lebih lanjut pada python.
Ia merupakan fungsi-fungsi magic yang kalau kita implementasikan maka objek yang kita buat akan memiliki kemampuan-kemampuan yang hampir sama dengan tipe data bawaan.
Simak terus tutorial ini, ya! Terima kasih banyak.
Referensi
[1] https://stackabuse.com/overloading-functions-and-operators-in-python/ – diakses tanggal 26 Mei 2021