Lompat ke konten Lompat ke sidebar Lompat ke footer

Inheritance atau Pewarisan dalam Python

Inheritance atau pewarisan merupakan salah satu konsep penting dalam pemrograman berorientasi objek Python. Pewarisan memungkinkan sebuah class memperoleh atribut dan metode dari class lain. Dengan cara tersebut, kode dapat digunakan kembali tanpa harus menulis ulang seluruh bagian program.

Sebelum mempelajari materi tentang Inheritance atau Pewarisan dalam Python, terlebih dahulu pelajari materi tentang: Penanganan Exception dalam Python, Exception Buatan Sendiri dalam Python, dan Class dalam Python.

Konsep pewarisan dapat digunakan ketika terdapat beberapa class yang memiliki karakteristik serupa. Sebuah class umum dapat dibuat sebagai dasar, kemudian class lain dapat mewarisi karakteristik tersebut dan menambahkan kemampuan khusus sesuai kebutuhan. Sebagai contoh, terdapat class `Kendaraan` yang memiliki atribut merek serta metode untuk bergerak. Selanjutnya dapat dibuat class `Mobil` dan `Motor` yang mewarisi karakteristik dari `Kendaraan`. Dengan demikian, bagian yang sama tidak perlu ditulis berulang kali.

Pengertian Inheritance

Inheritance adalah mekanisme yang memungkinkan sebuah class memperoleh atribut dan metode dari class lain. Class yang memberikan pewarisan disebut **parent class** atau class induk. Class yang menerima pewarisan disebut **child class** atau class turunan. Hubungannya dapat digambarkan seperti berikut:
Class Induk
 |
 +-- Class Turunan


Class turunan dapat menggunakan anggota yang berasal dari class induk.

Tujuan Inheritance

Pewarisan memiliki beberapa kegunaan penting, antara lain:
  • Menggunakan kembali kode yang sudah dibuat.
  • Mengurangi pengulangan kode.
  • Membuat struktur program lebih teratur.
  • Mengelompokkan class yang memiliki hubungan.
  • Memudahkan pengembangan program.
  • Memungkinkan class turunan memiliki kemampuan tambahan.
  • Membantu penerapan pemrograman berorientasi objek.

Parent Class dan Child Class

Berikut penjelasan tentang parent class dan child class.

Contoh sederhana:
class Hewan:
 def makan(self): 
  print("Hewan sedang makan")

class Kucing(Hewan):
pass

Pada contoh tersebut:
  • `Hewan` merupakan parent class.
  • `Kucing` merupakan child class.
  • `Kucing` mewarisi metode `makan()` dari `Hewan`.

Objek dapat dibuat seperti berikut:
kucing1 = Kucing()
kucing1.makan()


Hasil:
Hewan sedang makan

Walaupun metode `makan()` tidak ditulis di dalam `Kucing`, objek `Kucing` tetap dapat menggunakannya karena metode tersebut diwarisi dari `Hewan`.

Sintaks Inheritance

Bentuk dasar pewarisan dalam Python adalah:
class Anak(Induk):
pass


Contoh:
class Hewan:
pass
class Kucing(Hewan):
pass


Nama parent class ditulis di dalam tanda kurung setelah nama child class.

Contoh Inheritance Sederhana

Berikut adalah contoh inheritance sederhana.
class Kendaraan:
 def bergerak(self): 
  print("Kendaraan sedang bergerak")

class Mobil(Kendaraan):
pass

mobil1 = Mobil()
mobil1.bergerak()


Metode `bergerak()` berasal dari `Kendaraan`, tetapi dapat digunakan oleh objek `Mobil`.

Menambahkan Metode pada Child Class

Child class tidak hanya dapat mewarisi metode. Child class juga dapat memiliki metode sendiri.
class Kendaraan:
 def bergerak(self):
  print("Kendaraan sedang bergerak")

class Mobil(Kendaraan):
 def klakson(self):
  print("Mobil membunyikan klakson")


Penggunaan:
mobil1 = Mobil()
mobil1.bergerak()
mobil1.klakson()


Objek `mobil1` dapat menggunakan metode dari parent class dan metode miliknya sendiri.

Menambahkan Atribut pada Child Class

Child class juga dapat memiliki atribut tambahan.
class Hewan:
 def __init__(self, nama):
  self.nama = nama

class Kucing(Hewan):
 def __init__(self, nama, warna):
  self.nama = nama
  self.warna = warna


Penggunaan:
kucing1 = Kucing("Milo", "Putih")
print(kucing1.nama)
print(kucing1.warna)


Namun, terdapat cara yang lebih baik ketika atribut parent class juga perlu digunakan, yaitu menggunakan `super()`.

Fungsi super()

`super()` digunakan untuk memanggil metode dari parent class.

Contoh:
class Hewan:
 def __init__(self, nama):
  self.nama = nama

class Kucing(Hewan):
 def __init__(self, nama, warna):
  super().__init__(nama)
  self.warna = warna


Dengan `super().__init__(nama)`, konstruktor parent class dijalankan. Kemudian `warna` menjadi atribut tambahan milik `Kucing`.

Menggunakan super() pada Metode

`super()` tidak hanya digunakan pada `__init__()`.

Contoh:
class Hewan:
 def suara(self):
  print("Hewan mengeluarkan suara")

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


Penggunaan:
kucing1 = Kucing()
kucing1.suara()


Hasil:
Hewan mengeluarkan suara
Kucing mengeong


Method Overriding

Child class dapat mengganti perilaku metode yang berasal dari parent class. Proses tersebut disebut **method overriding**.

Contoh:
class Hewan:
 def suara(self):
  print("Hewan mengeluarkan suara")

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


Ketika metode dipanggil:
kucing1 = Kucing()
kucing1.suara()


Hasil:
Meong

Metode `suara()` milik `Kucing` digunakan sebagai pengganti metode `suara()` milik `Hewan`.

Tujuan Penggunaan Method Overriding

Method overriding berguna ketika child class membutuhkan perilaku yang berbeda dari parent class.

Contohnya:
Hewan
 |
 +-- Kucing → suara = Meong
 |
 +-- Anjing → suara = Guk


Kedua class dapat memiliki metode `suara()`, tetapi hasilnya berbeda.

Contoh Inheritance Hewan

Berikut diberikan contoh penggunaan inheritance hewan.
class Hewan:
 def __init__(self, nama):
  self.nama = nama
 def makan(self):
  print(self.nama, "sedang makan")

class Kucing(Hewan):
 def suara(self):
  print(self.nama, "berbunyi meong")

kucing1 = Kucing("Milo")
kucing1.makan()
kucing1.suara()


Class `Kucing` mewarisi atribut `nama` dan metode `makan()` dari `Hewan`. Class tersebut juga memiliki metode tambahan `suara()`.

Contoh Inheritance Kendaraan

Berikut diberikan contoh inheritance kendaraan.
class Kendaraan:
 def __init__(self, merek):
  self.merek = merek
 def bergerak(self):
  print(self.merek, "sedang bergerak")

class Mobil(Kendaraan):
 def klakson(self):
  print("Klakson mobil berbunyi")

class Motor(Kendaraan):
 def standar(self):
  print("Standar motor digunakan")


Penggunaan:
mobil1 = Mobil("Toyota")
motor1 = Motor("Honda")
mobil1.bergerak()
mobil1.klakson()
motor1.bergerak()
motor1.standar()


Kedua child class menggunakan metode `bergerak()` dari parent class.

Single Inheritance

Single inheritance adalah pewarisan yang melibatkan satu parent class dan satu child class.

Strukturnya:
Parent
|
Child


Contoh:
class Hewan:
 def makan(self):
  print("Makan")

class Kucing(Hewan):
 pass


`Kucing` mewarisi `Hewan`.

Multiple Inheritance

Python juga mendukung multiple inheritance. Dalam konsep ini, sebuah child class dapat mewarisi lebih dari satu parent class.

Contoh:
class Terbang:
 def terbang(self):
  print("Dapat terbang")

class Berenang:
 def berenang(self):
  print("Dapat berenang")

class Bebek(Terbang, Berenang):
 pass


Objek:
bebek1 = Bebek()
bebek1.terbang()
bebek1.berenang()


Class `Bebek` memperoleh metode dari `Terbang` dan `Berenang`.

Multilevel Inheritance

Multilevel inheritance adalah pewarisan yang membentuk beberapa tingkat.

Contohnya:
Hewan
|
Mamalia
|
Kucing


Kode:
class Hewan:
 def makan(self):
  print("Makan")

class Mamalia(Hewan):
 def menyusui(self):
  print("Menyusui")

class Kucing(Mamalia):
 def mengeong(self):
  print("Meong")


Objek `Kucing` dapat menggunakan metode dari `Kucing`, `Mamalia`, dan `Hewan`.
kucing1 = Kucing()

kucing1.makan()
kucing1.menyusui()
kucing1.mengeong()


Hierarchical Inheritance

Hierarchical inheritance terjadi ketika beberapa child class berasal dari satu parent class.

Struktur:
    Hewan
     /  \
Kucing  Anjing


Contoh:
class Hewan:
 def makan(self):
  print("Hewan makan")

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

class Anjing(Hewan):
 def suara(self):
  print("Guk guk")


Kedua child class mewarisi `makan()` dari `Hewan`.

Hybrid Inheritance

Hybrid inheritance merupakan gabungan dari beberapa bentuk pewarisan.

Contoh sederhana:
     Hewan
     /    \
Mamalia  Burung
     \    /
     Makhluk


Dalam program yang kompleks, bentuk pewarisan seperti ini perlu dirancang dengan hati-hati agar hubungan antarkelas tetap mudah dipahami.

Memeriksa Hubungan Class dengan isinstance()

Fungsi `isinstance()` digunakan untuk memeriksa apakah sebuah objek merupakan instance dari class tertentu.

Contoh:
class Hewan:
pass

class Kucing(Hewan):
pass

kucing1 = Kucing()
print(isinstance(kucing1, Kucing))
print(isinstance(kucing1, Hewan))


Keduanya menghasilkan:
True
True


Hal tersebut terjadi karena `Kucing` merupakan turunan dari `Hewan`.

Memeriksa Hubungan Class dengan issubclass()

`issubclass()` digunakan untuk memeriksa apakah sebuah class merupakan turunan dari class lain.

Contoh:
class Hewan:
pass
class Kucing(Hewan):
pass
print(issubclass(Kucing, Hewan))


Hasil:
True

Inheritance dan Atribut

Atribut yang dibuat pada parent class dapat diwarisi child class.

Contoh:
class Siswa:
  sekolah = "SMA Contoh"
class SiswaIPA(Siswa):
  pass
siswa1 = SiswaIPA()
print(siswa1.sekolah)


Child class dapat mengakses atribut `sekolah`.

Inheritance dan Konstruktor

Parent class dapat memiliki konstruktor.
class Siswa:
 def __init__(self, nama):
  self.nama = nama


Child class dapat menggunakan konstruktor tersebut jika tidak mendefinisikan `__init__()` sendiri.
class SiswaIPA(Siswa):
pass
siswa1 = SiswaIPA("Andi")
print(siswa1.nama)


Menggunakan super() untuk Konstruktor

Jika child class memiliki konstruktor sendiri, `super()` dapat digunakan untuk menjalankan konstruktor parent.
class Siswa:
 def __init__(self, nama):
  self.nama = nama

class SiswaIPA(Siswa):
 def __init__(self, nama, kelas):
  super().__init__(nama)
  self.kelas = kelas


Penggunaan:
siswa1 = SiswaIPA("Andi", "10A")
print(siswa1.nama)
print(siswa1.kelas)


Keuntungan Inheritance

Pewarisan memiliki beberapa keuntungan:
  • Mengurangi penulisan kode yang sama.
  • Meningkatkan penggunaan kembali kode.
  • Memudahkan pengembangan class baru.
  • Membuat hubungan antarclass lebih jelas.
  • Mempermudah pemeliharaan program.
  • Memungkinkan metode parent digunakan oleh banyak child class.
  • Memungkinkan child class menambahkan perilaku baru.
  • Memungkinkan perubahan perilaku melalui method overriding.

Kekurangan Inheritance

Pewarisan juga perlu digunakan secara tepat. Beberapa hal yang perlu diperhatikan:
  • Hubungan antarclass dapat menjadi rumit jika terlalu banyak tingkat.
  • Perubahan pada parent class dapat memengaruhi child class.
  • Multiple inheritance dapat membuat hubungan class lebih sulit dipahami.
  • Pewarisan yang tidak sesuai dapat membuat struktur program menjadi tidak teratur.

Karena itu, inheritance sebaiknya digunakan ketika memang terdapat hubungan yang jelas antara parent class dan child class.

Perbedaan Parent Class dan Child Class


Istilah

Pengertian

  • Parent class
  • Class yang memberikan atribut atau metode
  • Child class
  • Class yang menerima pewarisan
  • super()
  • Digunakan untuk mengakses bagian parent class
  • Method overriding
  • Mengganti perilaku metode parent class
  • isinstance()
  • Memeriksa apakah objek merupakan instance suatu class
  • issubclass()
  • Memeriksa hubungan antara dua class

Contoh Program Lengkap

Berikut contoh program sederhana yang menggunakan inheritance:
class Hewan:
 def __init__(self, nama):
  self.nama = nama
 def makan(self):
  print(self.nama, "sedang makan")

class Kucing(Hewan):
 def suara(self):
  print(self.nama, "mengeluarkan suara meong")

class Anjing(Hewan):
 def suara(self):
  print(self.nama, "mengeluarkan suara guk guk")

kucing1 = Kucing("Milo")
anjing1 = Anjing("Buddy")

kucing1.makan()
kucing1.suara()

anjing1.makan()
anjing1.suara()


Program tersebut memiliki satu parent class, yaitu `Hewan`.

Terdapat dua child class:
  • `Kucing`
  • `Anjing`

Kedua child class mewarisi `nama` dan metode `makan()` dari `Hewan`. Masing-masing child class memiliki metode `suara()` dengan perilaku berbeda.

Contoh Program dengan super()

Berikut adalah contoh program dengan menggunakan super().
class Kendaraan:
 def __init__(self, merek):
  self.merek = merek
 def informasi(self):
  print("Merek:", self.merek)

class Mobil(Kendaraan):
 def __init__(self, merek, jumlah_roda):
  super().__init__(merek)
  self.jumlah_roda = jumlah_roda

 def informasi(self):
  super().informasi()
  print("Jumlah roda:", self.jumlah_roda)

mobil1 = Mobil("Toyota", 4)
mobil1.informasi()


Pada contoh tersebut, metode `informasi()` pada `Mobil` memanggil metode `informasi()` milik `Kendaraan` menggunakan `super()`.

Contoh Program Siswa

Inheritance juga dapat digunakan untuk mengelola jenis siswa.
class Siswa:
 def __init__(self, nama, kelas):
  self.nama = nama
  self.kelas = kelas

 def tampilkan_data(self):
  print("Nama:", self.nama)
  print("Kelas:", self.kelas)

class SiswaIPA(Siswa):
 def pelajaran():
  print("Mempelajari mata pelajaran IPA")

class SiswaIPS(Siswa):
 def pelajaran():
  print("Mempelajari mata pelajaran IPS")


Pada contoh tersebut, `SiswaIPA` dan `SiswaIPS` dapat mewarisi data dari `Siswa`. Agar metode dapat dipanggil melalui objek, penulisan metode perlu menyertakan `self`:
class SiswaIPA(Siswa):
 def pelajaran(self):
  print("Mempelajari mata pelajaran IPA")

class SiswaIPS(Siswa):
 def pelajaran(self):
  print("Mempelajari mata pelajaran IPS")


Kemudian:
siswa1 = SiswaIPA("Andi", "10A")
siswa2 = SiswaIPS("Budi", "10B")
siswa1.tampilkan_data()
siswa1.pelajaran()
siswa2.tampilkan_data()
siswa2.pelajaran()


Hal yang Perlu Diperhatikan

Ketika menggunakan inheritance, beberapa hal penting perlu diperhatikan:
  • Parent class sebaiknya berisi karakteristik yang memang dimiliki oleh child class.
  • Gunakan nama class yang jelas.
  • Gunakan `super()` ketika bagian dari parent class perlu dijalankan.
  • Gunakan method overriding jika child class membutuhkan perilaku yang berbeda.
  • Hindari pewarisan yang terlalu dalam tanpa alasan yang jelas.
  • Gunakan multiple inheritance secara hati-hati.
  • Pastikan hubungan antara parent dan child class memang logis.

Latihan

Berikut diberikan beberapa contoh oleh latihan yang dapat langsung dipraktikkan oleh pengguna.

Latihan 1

Buat class `Hewan` yang memiliki metode `makan()`. Kemudian buat class `Kucing` yang mewarisi `Hewan`.

Latihan 2

Buat class `Kendaraan` dengan atribut `merek`. Buat class `Mobil` yang mewarisinya.

Latihan 3

Buat class `Hewan` dengan metode `suara()`. Buat `Kucing` dan `Anjing` yang melakukan method overriding terhadap metode tersebut.

Latihan 4

Gunakan `super()` untuk memanggil konstruktor parent class.

Latihan 5

Buat tiga class:
Hewan
Mamalia
Kucing


Gunakan multilevel inheritance.

Latihan 6

Buat class `Terbang` dan `Berenang`. Kemudian buat class `Bebek` yang mewarisi keduanya.

Latihan 7

Gunakan `isinstance()` untuk memeriksa hubungan objek dengan parent class.

Latihan 8

Gunakan `issubclass()` untuk memeriksa hubungan child class dengan parent class.

Latihan 9

Buat class `Siswa` sebagai parent class.

Kemudian buat:
SiswaIPA
SiswaIPS


sebagai child class.

Latihan 10

Buat program kendaraan menggunakan inheritance, `super()`, atribut, metode, dan method overriding.

Kesimpulan

Inheritance atau pewarisan merupakan mekanisme dalam Python yang memungkinkan sebuah class memperoleh atribut dan metode dari class lain. Class yang memberikan pewarisan disebut parent class, sedangkan class yang menerima pewarisan disebut child class.

Pewarisan dapat mengurangi pengulangan kode karena bagian yang sama cukup ditempatkan pada parent class. Child class kemudian dapat menggunakan bagian tersebut sekaligus menambahkan atribut dan metode baru.

Python menyediakan `super()` untuk mengakses bagian parent class. Selain itu, child class dapat melakukan method overriding ketika membutuhkan perilaku yang berbeda dari parent class.

Python juga mendukung beberapa bentuk inheritance, seperti single inheritance, multiple inheritance, multilevel inheritance, hierarchical inheritance, dan hybrid inheritance.

Penggunaan inheritance perlu dilakukan secara tepat. Hubungan antara parent class dan child class sebaiknya memiliki keterkaitan yang jelas agar struktur program tetap mudah dipahami. Dengan memahami inheritance, kemampuan dalam menggunakan pemrograman berorientasi objek Python dapat berkembang ke tingkat yang lebih lanjut.

Artikel ini akan dibaca oleh: Eva Elvina Fitriani, Ezar Gatafa Aryo Zahari, Fadiya Hanun Lailatul Arsy, Fadlan Wahyu Saputra, dan Fahra Amelia.

6 komentar untuk "Inheritance atau Pewarisan dalam Python"

  1. Apa yang dimaksud dengan void main() pada C++?

    BalasHapus
    Balasan
    1. Void main() pada C++ menunjukkan bahwa fungsi main() tidak akan mengembalikan nilai apapung pada program, sebaliknya int main() menunjukkan bahwa main() dapat mengembalikan data tertentu dengan tipe data bilangan bulat atau tipe data integer.

      Hapus
  2. Kenapa harus menggunaan void main pada C++?

    BalasHapus
    Balasan
    1. Tipe data void pada fungsi main dapat digunakan ketika tidak ingin mengembalikan nilai apapun ke fungsi pemanggil. Selain itu, void yang digunakan dengan fungsi main() bertujuan untuk tidak mengembalikan nilai apapun dan dapat digunakan dengan fungsi yang ditentukan pengguna yang telah ditentukan nilainya pada bahasa pemrograman C.

      Hapus
  3. Apa yang dilakukan void main pada C++?

    BalasHapus
    Balasan
    1. Void main merupakan fungsi yang tidak mengembalikan nilai apapun, atau dalam bentuk sederhanyanya adalah nilai null sehingga dapat mengembalikan tipe data apa saja. Jika ingin menggunakan void main maka dibutuhkan pengembalikan nilai 0 atau nilai apapun sebagai bentuk aturan tertentu. Ketika tidak terdapat nilai apapun yang dikembalikan dari fungsi main, maka bentuk penulisannya adalah void main() karena tipe data void akan diambil sebagai nilai NULL.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -