Kustomisasi fungsionalitas lewat pewarisan

Pengantar Pemrograman Berorientasi Objek di Python

George Boorman

Curriculum Manager, DataCamp

Hierarki kelas rekening bank

Pengantar Pemrograman Berorientasi Objek di Python

Sejauh ini

class BankAccount:
    def __init__(self, balance):
       self.balance = balance

    def withdraw(self, amount):
       self.balance -=amount

# Kelas kosong yang mewarisi dari BankAccount
class SavingsAccount(BankAccount):
    pass
Pengantar Pemrograman Berorientasi Objek di Python

Kustomisasi konstruktor

class SavingsAccount(BankAccount):    
    # Konstruktor SavingsAccount dengan argumen tambahan
    def __init__(self, balance, interest_rate):  

# Panggil konstruktor induk dengan ClassName.__init__() # self adalah SavingsAccount sekaligus BankAccount BankAccount.__init__(self, balance)
# Tambahkan fungsionalitas self.interest_rate = interest_rate
  • Dapat menjalankan konstruktor induk lebih dulu dengan Parent.__init__(self, args...)
  • Tambahkan fungsionalitas
  • Tidak wajib memanggil konstruktor induk
Pengantar Pemrograman Berorientasi Objek di Python

Buat objek dengan konstruktor kustom

# Bangun objek dengan konstruktor baru
acct = SavingsAccount(1000, 0.03)
acct.interest_rate
0.03
Pengantar Pemrograman Berorientasi Objek di Python

Menambah fungsionalitas

  • Tambahkan metode seperti biasa
  • Dapat memakai data dari kelas induk dan anak
class SavingsAccount(BankAccount):
    def __init__(self, balance, interest_rate):
        BankAccount.__init__(self, balance)
        self.interest_rate = interest_rate

    # Fungsionalitas baru
    def compute_interest(self, n_periods=1):
        return self.balance * ( (1 + self.interest_rate) ** n_periods - 1)
Pengantar Pemrograman Berorientasi Objek di Python

Hierarki kelas rekening bank

Pengantar Pemrograman Berorientasi Objek di Python

Menambah kelas turunan kedua

class CheckingAccount(BankAccount):

def __init__(self, balance, limit): BankAccount.__init__(self, balance) # Panggil konstruktor ParentClass self.limit = limit
def deposit(self, amount): self.balance += amount
def withdraw(self, amount, fee=0): # Argumen fee baru
if amount <= self.limit: BankAccount.withdraw(self, amount + fee) else: pass # Tidak dijalankan jika kondisi tidak terpenuhi
Pengantar Pemrograman Berorientasi Objek di Python
check_acct = CheckingAccount(1000, 25)

# Akan memanggil withdraw dari CheckingAccount
check_acct.withdraw(200)

# Akan memanggil withdraw dari CheckingAccount check_acct.withdraw(200, fee=15)
bank_acct = BankAccount(1000)

# Akan memanggil withdraw dari BankAccount
bank_acct.withdraw(200)

# Akan menghasilkan error bank_acct.withdraw(200, fee=15)
TypeError: withdraw() got an unexpected
keyword argument 'fee'
  • Melanggar polimorfisme
    • Metode kelas induk/anak berbeda
Pengantar Pemrograman Berorientasi Objek di Python

Ayo berlatih!

Pengantar Pemrograman Berorientasi Objek di Python

Preparing Video For Download...