Method Overriding dan Overloading di Python

Post image

Method overriding dan overloading adalah dua teknik penting dalam OOP untuk membuat method lebih fleksibel dan sesuai kebutuhan. Dengan memahami kedua konsep ini, kamu bisa membuat class Python yang lebih powerful, mudah dikembangkan, dan siap digunakan ulang di berbagai situasi. Artikel ini akan membahas secara mendalam tentang method overriding dan overloading, lengkap dengan contoh, studi kasus, best practice, dan tips untuk pemula.

Apa Itu Method Overriding?

Method overriding adalah proses mendefinisikan ulang method di class anak yang sudah ada di class induk. Dengan overriding, perilaku method bisa disesuaikan di class turunan. Ini sangat berguna saat kamu ingin class turunan punya perilaku berbeda dari class induk, meskipun nama method-nya sama.

Analogi Sederhana

Bayangkan kamu punya class Kendaraan dengan method jalan(). Semua kendaraan bisa berjalan, tapi cara berjalan mobil dan sepeda motor tentu berbeda. Dengan overriding, kamu bisa membuat method jalan() di class Mobil dan Motor yang perilakunya berbeda dari class Kendaraan.

Contoh Method Overriding

class Kendaraan:
    def jalan(self):
        print("Kendaraan berjalan...")

class Mobil(Kendaraan):
    def jalan(self):
        print("Mobil melaju di jalan raya.")

class Motor(Kendaraan):
    def jalan(self):
        print("Motor melaju di jalur motor.")

k = Kendaraan()
m = Mobil()
mt = Motor()

k.jalan()
m.jalan()
mt.jalan()
Kendaraan berjalan...
Mobil melaju di jalan raya.
Motor melaju di jalur motor.

Penjelasan:

  • Method jalan di class Mobil dan Motor menimpa (override) method di class Kendaraan.
  • Saat method jalan() dipanggil dari object Mobil atau Motor, Python akan menjalankan method yang ada di class turunan, bukan class induk.

Memanggil Method Parent dengan super()

Kadang, kamu ingin menambah perilaku method parent, bukan menggantinya total. Gunakan super() untuk memanggil method parent.

class Hewan:
    def suara(self):
        print("Hewan bersuara...")

class Kucing(Hewan):
    def suara(self):
        super().suara()
        print("Meong!")

k = Kucing()
k.suara()
Hewan bersuara...
Meong!

Studi Kasus: Overriding pada Sistem Pembayaran

Misal kamu punya sistem pembayaran dengan berbagai metode.

class Pembayaran:
    def proses(self, jumlah):
        print(f"Pembayaran sejumlah {jumlah} diproses.")

class TransferBank(Pembayaran):
    def proses(self, jumlah):
        print(f"Transfer bank sejumlah {jumlah} diproses.")

class EWallet(Pembayaran):
    def proses(self, jumlah):
        print(f"Pembayaran e-wallet sejumlah {jumlah} diproses.")

daftar = [TransferBank(), EWallet()]
for metode in daftar:
    metode.proses(100000)
Transfer bank sejumlah 100000 diproses.
Pembayaran e-wallet sejumlah 100000 diproses.

Apa Itu Method Overloading?

Method overloading adalah membuat beberapa method dengan nama sama tapi parameter berbeda. Di banyak bahasa OOP (seperti Java/C++), overloading didukung secara langsung. Namun, Python tidak mendukung method overloading secara eksplisit. Jika kamu mendefinisikan dua method dengan nama sama di satu class, yang terakhir akan menimpa yang sebelumnya.

Bagaimana Cara Overloading di Python?

Python mengakalinya dengan:

  • Default argument (parameter dengan nilai default)
  • *args dan **kwargs (parameter fleksibel)

Contoh Method Overloading di Python

class Calculator:
    def tambah(self, a, b, c=0):
        return a + b + c

calc = Calculator()
print(calc.tambah(2, 3))      # 2 argumen
print(calc.tambah(2, 3, 4))   # 3 argumen
5
9

Penjelasan:

  • Method tambah bisa dipanggil dengan 2 atau 3 parameter berkat default argument.

Overloading dengan *args dan **kwargs

Jika ingin lebih fleksibel, gunakan *args untuk menerima jumlah argumen tak terbatas.

class Penjumlahan:
    def tambah(self, *args):
        return sum(args)

p = Penjumlahan()
print(p.tambah(1, 2))
print(p.tambah(1, 2, 3, 4, 5))
3
15

Studi Kasus: Overloading pada Fungsi Cetak

Misal kamu ingin membuat method cetak yang bisa menerima satu string, list, atau dictionary.

class Printer:
    def cetak(self, data):
        if isinstance(data, str):
            print(f"Teks: {data}")
        elif isinstance(data, list):
            print("List:", ", ".join(str(x) for x in data))
        elif isinstance(data, dict):
            print("Dictionary:", ", ".join(f"{k}={v}" for k, v in data.items()))
        else:
            print("Tipe data tidak dikenali.")

p = Printer()
p.cetak("Hello")
p.cetak([1, 2, 3])
p.cetak({"a": 1, "b": 2})
Teks: Hello
List: 1, 2, 3
Dictionary: a=1, b=2

Perbandingan: Overriding vs Overloading

Overriding Overloading
Mendefinisikan ulang method parent di class anak Membuat method dengan nama sama, parameter berbeda
Didukung langsung di Python Tidak didukung langsung, pakai default arg/args
Untuk inheritance (pewarisan) Untuk fleksibilitas pemanggilan method
Contoh: Mobil.jalan() Contoh: Calculator.tambah(a, b) dan Calculator.tambah(a, b, c)

Best Practice dan Tips

No Tips Penjelasan
1 Gunakan overriding untuk mengubah perilaku method parent Pastikan method di class anak sesuai kebutuhan
2 Gunakan super() jika ingin menambah, bukan mengganti total Agar perilaku parent tetap berjalan
3 Untuk overloading, manfaatkan default argumen atau *args Agar method fleksibel menerima argumen
4 Dokumentasikan parameter method dengan jelas Agar user tahu cara pakai method
5 Jangan buat method terlalu rumit dengan banyak tipe argumen Bagi jadi beberapa method jika perlu

Kesalahan Umum Pemula

  • Lupa menulis method dengan parameter yang benar saat overriding.
  • Tidak memanggil super() padahal butuh perilaku parent.
  • Mengira Python mendukung overloading seperti Java/C++ (padahal tidak).
  • Membuat method dengan banyak tipe argumen tanpa validasi tipe.

FAQ Seputar Method Overriding dan Overloading

Q: Apakah Python mendukung method overloading seperti Java?
A: Tidak, Python hanya mempertahankan method terakhir dengan nama sama. Gunakan default argumen atau *args.

Q: Apakah overriding bisa dilakukan di semua method?
A: Ya, semua method parent bisa di-override di class anak.

Q: Bagaimana cara memanggil method parent dari child?
A: Gunakan super().nama_method().

Q: Apakah overloading bisa dilakukan di function global?
A: Bisa, dengan default argumen atau *args.

Q: Apakah overriding dan overloading bisa digabung?
A: Bisa, misal class anak override method parent dan menambah parameter default.

Studi Kasus Lanjutan: Overriding dan Overloading pada Sistem Notifikasi

Misal kamu punya sistem notifikasi yang bisa mengirim pesan ke email, SMS, atau WhatsApp.

class Notifikasi:
    def kirim(self, pesan):
        print(f"Notifikasi: {pesan}")

class Email(Notifikasi):
    def kirim(self, pesan, subject=None):
        if subject:
            print(f"Email: [{subject}] {pesan}")
        else:
            print(f"Email: {pesan}")

class SMS(Notifikasi):
    def kirim(self, pesan):
        print(f"SMS: {pesan}")

n = Notifikasi()
e = Email()
s = SMS()

n.kirim("Sistem aktif.")
e.kirim("Ada pesan baru.", subject="Info")
s.kirim("Kode OTP: 123456")
Notifikasi: Sistem aktif.
Email: [Info] Ada pesan baru.
SMS: Kode OTP: 123456

Kesimpulan

Method overriding dan overloading adalah dua teknik penting dalam OOP Python untuk membuat class lebih fleksibel dan powerful. Overriding memungkinkan class turunan mengubah perilaku method parent, sedangkan overloading (dengan default argumen/args) membuat method lebih fleksibel menerima berbagai parameter.

Teruslah berlatih membuat class dengan overriding dan overloading di berbagai kasus nyata, agar semakin mahir dan siap membangun aplikasi Python yang profesional!

Happy coding!

comments powered by Disqus

You May Also Like