Algorithms, Data Structures, and Programming (ADSP)
Bagian dari Combined Module: Pendahuluan High Performance (Pemrograman Parallel) for Data Science (HPDS)
Bagian ke-5 dari "dasar Python" untuk Big Data & Data Science. Bagian dari modul HPDS dan ADSP di kurikulum tau-data Indonesia.
Pembahasan Pendahuluan OOP di Python bagian ke-02:
- OOP Inheritance(s)
- Super Function
- Method Overwriting/Overriding
Video Lesson ADSP-05
Algorithms, Data Structures, and Programming (ADSP)
https://taudata.blogspot.com/2022/04/adsp-05.html
ADSP-05: Inheritance
(C) Taufik Sutanto
Contoh Class dan Object pada lesson sebelumnya:¶
In [1]:
# Tambah fungsi rata-rata nilai kelas
class Mahasiswa:
def __init__(self, nama, nilai):
self.nama = nama
self.nilai = nilai
def nilai_mahasiswa(self):
return self.nilai
class Kuliah:
def __init__(self, nama, max_mahasiswa):
self.nama = nama
self.max_mahasiswa = max_mahasiswa
self.mahasiswa = []
def tambah_mahasiswa(self, nama):
if len(self.mahasiswa) < self.max_mahasiswa:
self.mahasiswa.append(nama)
return True
else:
return "Error: Maaf kelas Penuh"
def rerata_nilai(self):
sum_ = 0
for siswa in self.mahasiswa:
sum_ += siswa.nilai_mahasiswa()
# perhatikan disini kita melakukan ini karena siswa adalah objek
# objek siswa punya methode "nilai_mahasiswa"
return sum_/len(self.mahasiswa)
m1 = Mahasiswa('Udin', 77)
m2 = Mahasiswa('Ucok', 67)
m3 = Mahasiswa('Asep', 87)
kelas = Kuliah('Kalkulus', 2)
kelas.tambah_mahasiswa(m1), kelas.tambah_mahasiswa(m2)
Out[1]:
(True, True)
In [2]:
'Nilai rata-rata kelas ', kelas.nama, ' adalah = ', kelas.rerata_nilai()
Out[2]:
('Nilai rata-rata kelas ', 'Kalkulus', ' adalah = ', 72.0)
Outline Lesson ADSP-05:¶
- Inheritance
- Super Function
- Method Overriding/Overwriting
inheritance di OOP (Python)¶
- Ketika child class diwariskan property dari class parent, maka hal ini disebut inheritance
Mengapa menggunakan inheritance?¶
- Code reusability: bayangkan seperti "template".
- Transition & Readability: Baik untuk teamwork.
- Realworld Relationship: Hubungan antar class/objects
In [1]:
# Contoh paling sederhana inheritance
class Ortu:
def pungsi1(self):
print("ini fungsi di orang tua")
class Anak(Ortu):
def pungsi2(self):
print("ini fungsi di anak")
sulung = Anak()
# PERHATIKAN "sulung" memiliki fungsi dari "Ortu"
sulung.pungsi1(), sulung.pungsi2()
ini fungsi di orang tua ini fungsi di anak
Out[1]:
(None, None)
In [2]:
# Menggunakan init seperti lesson sebelumnya (ADSP-04)
class Ortu:
def __init__(self, nama='Bambang', umur='40'):
self.nama = nama
self.umur = umur
def pungsi1(self):
print("ini fungsi di orang tua")
def info(self):# Method dari class seperti Lesson sebelumnya
print("Nama = {}, Umur = {}".format(self.nama, self.umur))
class Anak(Ortu):
def __init__(self, nama, umur, anakKe):
Ortu.__init__(self, nama, umur)
self.anakKe = anakKe
def pungsi2(self):
print("ini fungsi di anak")
def info(self):
print("Nama = {}, Umur = {}, anak Ke-{}".format(self.nama, self.umur, self.anakKe))
sulung = Anak("Budi", 5, 2) # Property/Method "Ortu" di OVERWRITE oleh "Anak"
print(sulung.info())
Nama = Budi, Umur = 5, anak Ke-2 None
- Single: 1 child, 1 parent (Contoh sebelumnya)
- Multiple: Parent>1
- Multilevel: Child menjadi Parent bagi Child lain
- Hierarchical: Hybrid dari jenis diatas.
- image source: https://www.edureka.co/blog/object-oriented-programming-python/
In [3]:
# Contoh Multiple Inheritance
class Ayah:
def __init__(self, nama='Bambang', umur='40'):
self.nama = nama
self.umur = umur
def pungsiAyah(self):
print("ini fungsi di Ayah")
def info(self):
print("Nama = {}, Umur = {}".format(self.nama, self.umur))
class Ibu:
def __init__(self, nama='Wati', umur='40'):
self.nama = nama
self.umur = umur
def pungsiIbu(self):
print("ini fungsi di Ibu")
def info(self):# Method dari class seperti kuliah sebelumnya
print("Nama = {}, Umur = {}".format(self.nama, self.umur))
class Anak(Ayah, Ibu):
def __init__(self, nama, umur, anakKe):
Ayah.__init__(self, nama, umur)
self.anakKe = anakKe
def pungsiAnak(self):
print("ini fungsi di anak")
def info(self):
print("Nama = {}, Umur = {}, anak Ke-{}".format(self.nama, self.umur, self.anakKe))
sulung = Anak("Budi", 5, 2) # Property/method "Ayah & Ibu" diwariskan ke "Anak"
print(sulung.pungsiAyah(), sulung.pungsiIbu())
ini fungsi di Ayah ini fungsi di Ibu None None
In [4]:
# Contoh Multilevel Inheritance
class Kakek:
def __init__(self, nama='Iwan', umur='40'):
self.nama = nama
self.umur = umur
def pungsiKakek(self):
print("ini fungsi di Kakek")
def info(self):# Method dari class seperti kuliah sebelumnya
print("Nama = {}, Umur = {}".format(self.nama, self.umur))
class Ortu(Kakek):
def __init__(self, nama='Parto', umur='40'):
self.nama = nama
self.umur = umur
def pungsiOrtu(self):
print("ini fungsi di Ortu")
def info(self):
print("Nama = {}, Umur = {}".format(self.nama, self.umur))
class Anak(Ortu):
def __init__(self, nama, umur, anakKe):
Ayah.__init__(self, nama, umur)
self.anakKe = anakKe
def pungsiAnak(self):
print("ini fungsi di anak")
def info(self):
print("Nama = {}, Umur = {}, anak Ke-{}".format(self.nama, self.umur, self.anakKe))
sulung = Anak("Budi", 5, 2) # Property/method "Ortu dan Kakek" diwariskan ke "Anak"
print(sulung.pungsiKakek())
ini fungsi di Kakek None
In [5]:
# Contoh Hierarchical inheritance
class Kakek:
def __init__(self, nama='Iwan', umur='40'):
self.nama = nama
self.umur = umur
def pungsiKakek(self):
print("ini fungsi di Kakek")
def info(self):
print("Nama = {}, Umur = {}".format(self.nama, self.umur))
class Ortu(Kakek):
def __init__(self, nama='Parto', umur='40'):
self.nama = nama
self.umur = umur
def pungsiOrtu(self):
print("ini fungsi di Ortu")
def info(self):
print("Nama = {}, Umur = {}".format(self.nama, self.umur))
class Paman():
def __init__(self, nama='Denis', umur='32'):
self.nama = nama
self.umur = umur
def pungsiPaman(self):
print("ini fungsi di Paman")
def info(self):
print("Nama = {}, Umur = {}".format(self.nama, self.umur))
class Anak(Paman, Ortu):
def __init__(self, nama, umur, anakKe):
Paman.__init__(self, nama, umur)
self.anakKe = anakKe
def pungsiAnak(self):
print("ini fungsi di anak")
def info(self):
print("Nama = {}, Umur = {}, anak Ke-{}".format(self.nama, self.umur, self.anakKe))
sulung = Anak("Budi", 5, 2)
print(sulung.pungsiPaman(), sulung.pungsiKakek())
ini fungsi di Paman ini fungsi di Kakek None None
Super Function¶
In [8]:
class Ortu():
def pungsiOrtu(self):
print("ini fungsi di Ortu")
class Anak(Ortu):
def pungsiAnak(self):
super().pungsiOrtu()
print("ini di dalam fungsi Anak")
sulung = Anak()
sulung.pungsiAnak()
ini fungsi di Ortu ini di dalam fungsi Anak
Method Overriding/Overwriting¶
- MO merubah fungsi di class Parent.
In [9]:
class Ortu():
def pungsi(self):
print("ini fungsi di Ortu")
class Anak(Ortu):
def pungsi(self): # Perhatikan Nama fungsi Sama
print("ini di dalam fungsi Anak")
sulung = Anak()
sulung.pungsi()
ini di dalam fungsi Anak