Class dan Objek dalam Python - Part 1 Setiap objek yang aku representasikan dalam
program berbasis OOP merupakan instansi/ bentuk nyata dari sebuah konsep yang disebut dengan
class. Oleh karena itu, class dapat juga aku sebutkan sebagai kerangka utama (blueprint) dari objek
Class dan Objek dalam Python - Part 3 Berkaitan dengan kedua jenis atribut yang telah
aku pelajari, aku menggunakan contoh berikut untuk memperkuat pemahamanku terkait dengan
konsep class attribute.
Class Karyawan pada umumnya memiliki beberapa atribut seperti nama, usia, pendapatan serta
nama perusahaan di mana karyawan tersebut bekerja. Untuk merepresentasikan diriku dan Senja
sebagai karyawan yang bekerja di sebuah perusahaan yang sama (anggap saja perusahan ABC),
aku dapat merepresentasikan dengan menggunakan konsep class attribute
1
aksara = Karyawan()
senja = Karyawan()
Menggunakan potongan kode di atas, nama_perusahaan sebagai class attribute dapat kita akses
dengan menggunakan syntax:
DEF
Kemudian, sesuai dengan konsep yang telah aku pelajari sebelumnya, saat aku mengubah nilai
atribut yang merupakan sebuah class attribute, nilai dari atribut akan berubah untuk seluruh
objek.
Saat perusahaan berubah nama, misalkan nama perusahaan berubah dari ‘ABC’ ke ‘DEF’, dikare-
nakan atribut nama_perusahaan merupakan sebuah class attribute, aku hanya cukup mengganti
nama_perusahaan pada salah satu objek saja (tidak perlu mengganti nama_perusahaan milik
seluruh objek). Contohnya:
DEF
DEF
Tugas: * Aku di minta untuk mengerjakan tutorial sederhana untuk membantu memahami konsep
OOP:
1. Definisikan Class Karyawan
2. Inisiasi object yang dinyatakan dalam variabel Aksara dan Senja
3. Cetak Nama Perusahaan melalui penggunaan keyword class
4. Ubah Nama Perusahaan menjadi ‘DEF’
2
print(senja.__class__.nama_perusahaan)
ABC
DEF
DEF
3
aksara.lembur()
# Senja memiliki proyek tambahan
senja.tambahan_proyek(2500000)
# Cetak pendapatan total Aksara dan Senja
print('Pendapatan Total Aksara: ' + str(aksara.total_pendapatan()))
print('Pendapatan Total Senja: ' +str(senja.total_pendapatan()))
[ ]: class Karyawan:
def __init__(self, nama, usia, pendapatan, insentif_lembur):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
self.insentif_lembur = insentif_lembur
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
def tambahan_proyek(self, jumlah_tambahan):
self.pendapatan_tambahan += jumlah_tambahan
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
class Perusahaan:
def __init__(self, nama, alamat, nomor_telepon):
self.nama = nama
self.alamat = alamat
self.nomor_telepon = nomor_telepon
self.list_karyawan = []
def aktifkan_karyawan(self, karyawan):
self.list_karyawan.append(karyawan)
def nonaktifkan_karyawan(self, nama_karyawan):
karyawan_nonaktif = None
for karyawan in self.list_karyawan:
if karyawan.nama == nama_karyawan:
karyawan_nonaktif = karyawan
break
if karyawan_nonaktif is not None:
4
self.list_karyawan.remove(karyawan_nonaktif)
# Definisikan perusahaan
perusahaan = Perusahaan('ABC', 'Jl. Jendral Sudirman, Blok11', '(021)95205XX')
# Definisikan nama-nama karyawan
karyawan_1 = Karyawan('Ani', 25, 8500000, 100000)
karyawan_2 = Karyawan('Budi', 28, 12000000, 150000)
karyawan_3 = Karyawan('Cici', 30, 15000000, 200000)
# Aktifkan karyawan di perusahaan ABC
perusahaan.aktifkan_karyawan(karyawan_1)
perusahaan.aktifkan_karyawan(karyawan_2)
perusahaan.aktifkan_karyawan(karyawan_3)
Encapsulation pada Python – Part 2 Agar suatu properti ataupun fungsi dari sebuah class
tidak dapat diakses secara bebas di luar scope milik suatu class, aku dapat mendefinisikan access
modifier (level akses) saat sebuah atribut/fungsi didefinisikan.
Terdapat 2 macam access modifier dalam Python, yakni.
Public access: dapat aku definisikan dengan secara langsung menuliskan nama dari atribut/ fungsi.
Dalam sebuah objek, atribut/fungsi yang bersifat public access dapat diakses di luar scope sebuah
class Private access: dapat aku definisikan dengan menambahkan double underscore (__) sebelum
menuliskan nama dari atribut/fungsi. Dalam sebuah objek, atribut/fungsi yang bersifat private
access hanya dapat diakses di dalam scope sebuah class.
5
Pada potongan kode di atas, atribut nama_perusahaan bersifat public yang mengartikan bahwa
aku dapat mengakses atribut ini di luar scope class Karyawan.
Saat aku mencoba mengakses atribut-atribut ini di luar scope class Karyawan, Python akan
mengembalikan error yang menyatakan bahwa class Karyawan tidak memiliki atribut tersebut.
Sebagai contoh,
ABC
tidak akan menyebabkan error dan menghasilkan output: ABC dan namun akan menyebabkan
error yang menyatakan bahwa Karyawan tidak memiliki attribut ____nama__
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[15], line 2
1 # Akan menimbulkan error ketika di run
----> 2 print(aksara.__nama)
Inheritance pada Python – Part 1 Inheritance adalah salah satu mekanisme di konsep OO
yang mengizinkan aku untuk mendefinisikan sebuah class baru berdasarkan class yang sebelumnya
telah dideklarasikan.
Melalui konsep inheritance, sebuah class baru dapat memiliki atribut dan fungsi pada class yang
sebelumnya telah didefinisikan. Pada konsep inheritance, atribut/fungsi yang akan diwariskan
hanyalah atribut/fungsi dengan access modifier public, atribut/fungsi dengan access modifier pri-
vate tidak akan diturunkan.
6
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
# Buat class turunan (sebagai inherit class) dari class karyawan,
# yaitu class AnalisData
class AnalisData(Karyawan):
def __init__(self, nama, usia, pendapatan):
# melakukan pemanggilan konstruktur class Karyawan
super().__init__(nama, usia, pendapatan)
# Buat kembali class turunan (sebagai inherit class) dari class karyawan,
# yaitu class IlmuwanData
class IlmuwanData(Karyawan):
def __init__(self, nama, usia, pendapatan):
# melakukan pemanggilan konstruktur class Karyawan
super().__init__(nama, usia, pendapatan)
# Buat objek karyawan yang bekerja sebagai AnalisData
aksara = AnalisData('Aksara', 25, 8500000)
aksara.lembur()
print(aksara.total_pendapatan())
# Buat objek karyawan yang bekerja sebagai IlmuwanData
senja = IlmuwanData('Senja', 28, 13000000)
senja.tambahan_proyek(2000000)
print(senja.total_pendapatan())
8750000
15000000
Inheritance pada Python – Part 2 Pada bagian pertama aku telah mempelajari bagaimana
child class mewarisi fungsi/atribut dari parent class dengan menggunakan fungsi super().
Melalui konsep inheritance, child class dapat memodifikasi atribut/ fungsi yang diwarisi oleh
sebuah parent class dengan mendefinisikan ulang atribut/ fungsi menggunakan nama yang sama.
7
[ ]: # Buat class turunan (sebagai inherit class) dari class karyawan,
# yaitu class AnalisData
class AnalisData(Karyawan):
def __init__(self, nama, usia, pendapatan):
# melakukan pemanggilan konstruktur class Karyawan
super().__init__(nama, usia, pendapatan)
[ ]: # Buat kembali class turunan (sebagai inherit class) dari class karyawan,
# yaitu class IlmuwanData
class IlmuwanData(Karyawan):
# mengubah atribut insentif_lembur yang digunakan pada fungsi lembur()
insentif_lembur = 500000
def __init__(self, nama, usia, pendapatan):
super().__init__(nama, usia, pendapatan)
Fungsi lembur pada objek aksara sebagai bagian dari class AnalisData akan menambahkan
total_pendapatan milik objek sebesar 250000 mengikuti insentif ____lembur__ milik class
Karyawan
[ ]: class Mamalia:
def __init__(self, nama):
self.__nama = nama
def interaksi(self):
print('Bersuara')
class Anjing(Mamalia):
def interaksi(self):
print('Guk')
8
class Manusia(Mamalia):
pass
blacky = Anjing('Blacky')
toni = Manusia('Toni')
toni.interaksi()
blacky.interaksi()
Bersuara
Guk
Polymorphism pada Python - Part 1 Selain dapat mendefinisikan ulang nilai dari atribut
yang diwarisi oleh parent class seperti pada contoh di atas, aku juga dapat juga dapat mendefin-
isikan ulang fungsi yang telah diwarisi oleh parent class.
Saat aku mendefinisikan kembali fungsi yang telah diwarisi oleh parent class, secara tidak langsung
aku telah menerapkan salah satu mekanisme yang secara khusus pada paradigma OO disebut
dengan istilah polymorphism.
Tugas: menerapkan Polymorphism
9
# lembur() pada class AnalisData
def lembur(self):
# pendapatan tambahan pada class AnalisData sebesar
# 10 % dari pendapatannya.
self.pendapatan_tambahan += int(self.pendapatan * 0.1)
fungsi lembur() pada objek aksara sebagai bagian dari class AnalisData akan menambahkan to-
tal_pendapatan milik objek sebesar 850000 (10% dari pendapatannya) mengikuti definisi dari
fungsi lembur() pada class AnalisData
Polymorphism pada Python - Part 2 Pada konsep inheritance, melalui fungsi super(), selain
dapat mengakses constructor milik parent class, child class juga dapat mengakses atribut/fungsi
yang dimiliki oleh parent class.
10
# Buat objek karyawan yang bekerja sebagai AnalisData
aksara = AnalisData('Aksara', 25, 8500000)
aksara.lembur()
print('Pendapatan Aksara', 'Rp',aksara.total_pendapatan())
11
# class Karyawan
class TenagaLepas(Karyawan):
def __init__(self, nama, usia, pendapatan):
super().__init__(nama, usia, pendapatan, 0)
def tambahan_proyek(self, nilai_proyek):
self.pendapatan_tambahan += int(0.01 * nilai_proyek)
# Definisikan class AnalisData sebagai child class dari
# class Karyawan
class AnalisData(Karyawan):
pass
# Definisikan class IlmuwanData sebagai child class dari
# class Karyawan
class IlmuwanData(Karyawan):
def tambahan_proyek(self, nilai_proyek):
self.pendapatan_tambahan += int(0.1 * nilai_proyek)
# Definisikan class PembersihData sebagai child class dari
# class TenagaLepas
class PembersihData(TenagaLepas):
pass
# Definisikan class DokumenterTeknis sebagai child class dari
# class TenagaLepas
class DokumenterTeknis(TenagaLepas):
def tambahan_proyek(self, jumlah_tambahan):
return
[ ]: import pandas as pd
df = pd.DataFrame(data)
print(df)
12
Nama Usia Pendapatan
0 Budi ? ?
1 Didi 25 ?
2 Hadi ? 8000000
Aku di minta untuk mengisi tabel dengan detail sebagai berikut:
• Budi berusia 21 dan pendapatan = 5000000
• Didi berusia 25 dan pendapatan = 5000000
• Hadi berusia 21 dan pendapatan = 8000000
Maka syntax yang akan di jalankan seperti berikut:
[ ]: class Karyawan:
nama_perusahaan = 'ABC'
insentif_lembur = 250000
# usia akan di-set nilainya menjadi 21 saat tidak
# dispesifikasikan dan pendapatan akan di-set nilainya
# menjadi 5000000 saat tidak dispesifikasikan
def __init__(self, nama, usia=21, pendapatan=5000000):
self.nama = nama
self.usia = usia
self.pendapatan = pendapatan
self.pendapatan_tambahan = 0
def lembur(self):
self.pendapatan_tambahan += self.insentif_lembur
def tambahan_proyek(self, insentif_proyek):
self.pendapatan_tambahan += insentif_proyek
def total_pendapatan(self):
return self.pendapatan + self.pendapatan_tambahan
# Karyawan baru pertama yang bernama Budi
karyawan_baru1 = Karyawan('Budi')
print(karyawan_baru1.nama)
print(karyawan_baru1.usia)
print(karyawan_baru1.total_pendapatan())
# Karyawan baru ke-2 yang bernama Didi, umur 25
karyawan_baru2 = Karyawan('Didi', 25)
print(karyawan_baru2.nama)
print(karyawan_baru2.usia)
print(karyawan_baru2.total_pendapatan())
# Karyawan baru ke-3 yang bernama Hadi, pendapatan 8000000
karyawan_baru3 = Karyawan('Hadi',pendapatan=8000000)
print(karyawan_baru3.nama)
print(karyawan_baru3.usia)
print(karyawan_baru3.total_pendapatan())
Budi
21
5000000
Didi
13
25
5000000
Hadi
21
8000000
TERIMA KASIH
14