Functionaliteit aanpassen via overerving

Objectgeoriënteerd programmeren in Python

Alex Yarosh

Content Quality Analyst @ DataCamp

een hiërarchie van accountklassen

Objectgeoriënteerd programmeren in Python

Wat we tot nu toe hebben

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

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

# Lege klasse geërfd van BankAccount
class SavingsAccount(BankAccount):
    pass
Objectgeoriënteerd programmeren in Python

Constructors aanpassen

class SavingsAccount(BankAccount):    

    # Constructor specifiek voor SavingsAccount met een extra parameter
    def __init__(self, balance, interest_rate):  

# Roep de ouderconstructor aan met ClassName.__init__() BankAccount.__init__(self, balance) # <--- self is een SavingsAccount maar ook een BankAccount
# Voeg meer functionaliteit toe self.interest_rate = interest_rate
  • Kan eerst de constructor van de ouderklasse uitvoeren met Parent.__init__(self, args...)
  • Voeg meer functionaliteit toe
  • Hoeft de ouderconstructors niet aan te roepen
Objectgeoriënteerd programmeren in Python

Objecten maken met een aangepaste constructor

# Maak het object met de nieuwe constructor
acct = SavingsAccount(1000, 0.03)
acct.interest_rate
0.03
Objectgeoriënteerd programmeren in Python

Functionaliteit toevoegen

  • Voeg methoden toe zoals gebruikelijk
  • Kan gegevens van zowel de ouder- als de kindklasse gebruiken
class SavingsAccount(BankAccount):    

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

  # Nieuwe functionaliteit
  def compute_interest(self, n_periods = 1):
     return self.balance * ( (1 + self.interest_rate) ** n_periods - 1)

Objectgeoriënteerd programmeren in Python

een hiërarchie van accountklassen

Objectgeoriënteerd programmeren in Python

Functionaliteit aanpassen

class CheckingAccount(BankAccount):

def __init__(self, balance, limit): BankAccount.__init__(self, balance) self.limit = limit
def deposit(self, amount): self.balance += amount
def withdraw(self, amount, fee=0):
if fee <= self.limit: BankAccount.withdraw(self, amount + fee) else: BankAccount.withdraw(self, amount + self.limit)
  • Kan de handtekening wijzigen (parameters toevoegen)
  • Gebruik Parent.method(self, args...) om een methode van de ouderklasse aan te roepen
Objectgeoriënteerd programmeren in Python
check_acct = CheckingAccount(1000, 25)

# Roept withdraw aan van CheckingAccount
check_acct.withdraw(200)
# Roept withdraw aan van CheckingAccount
check_acct.withdraw(200, fee=15)
bank_acct = BankAccount(1000)

# Roept withdraw aan van BankAccount
bank_acct.withdraw(200)
# Geeft een foutmelding
bank_acct.withdraw(200, fee=15)
TypeError: withdraw() kreeg een onverwacht
 sleutelwoordargument 'fee'
Objectgeoriënteerd programmeren in Python

Laten we oefenen!

Objectgeoriënteerd programmeren in Python

Preparing Video For Download...