Dědičnost tříd

Úvod do objektově orientovaného programování v Pythonu

George Boorman

Curriculum Manager, DataCamp

Znovupoužití kódu

 

1. Někdo to již udělal

 

  • Balíčky jsou skvělé pro pevnou funkcionalitu
  • OOP je skvělé pro přizpůsobení funkcionality

loga několika pythonových balíčků

Úvod do objektově orientovaného programování v Pythonu

Znovupoužití kódu

 

1. Někdo to již udělal

 

2. DRY: Don't Repeat Yourself

různé prvky grafického rozhraní

Úvod do objektově orientovaného programování v Pythonu

Znovupoužití kódu

 

1. Někdo to již udělal

 

2. DRY: Don't Repeat Yourself

nepoužívejte různé prvky grafického rozhraní

Úvod do objektově orientovaného programování v Pythonu

Dědičnost

 

$$\Large{\text{Nová funkcionalita třídy = Stará funkcionalita třídy + navíc}}$$

Úvod do objektově orientovaného programování v Pythonu

Příklad hierarchie

Třída BankAccount

Úvod do objektově orientovaného programování v Pythonu

Příklad hierarchie

SavingsAccount dědí z BankAccount

Úvod do objektově orientovaného programování v Pythonu

Příklad hierarchie

CheckingAccount také dědí z BankAccount

Úvod do objektově orientovaného programování v Pythonu

Příklad hierarchie

CheckingAccount má upravenou metodu withdraw

Úvod do objektově orientovaného programování v Pythonu

Implementace dědičnosti tříd

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

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


# Class inheriting from BankAccount class SavingsAccount(BankAccount): pass
  • BankAccount: Rodičovská třída, jejíž funkcionalita je rozšiřována/dědičná
  • SavingsAccount: Dceřiná/podtřída, která zdědí funkcionalitu a přidá další
Úvod do objektově orientovaného programování v Pythonu

Dceřiná třída má veškerá data rodičovské třídy

# Constructor inherited from BankAccount
savings_acct = SavingsAccount(1000)
type(savings_acct)
__main__.SavingsAccount
# Attribute inherited from BankAccount
savings_acct.balance
1000
# Method inherited from BankAccount
savings_acct.withdraw(300)
Úvod do objektově orientovaného programování v Pythonu

Inheritance: "is-a" relationship

A SavingsAccount is a BankAccount

(possibly with special features)

savings_acct = SavingsAccount(1000)
isinstance(savings_acct, SavingsAccount)
True
isinstance(savings_acct, BankAccount)
True

 

 

acct = BankAccount(500)
isinstance(acct, SavingsAccount)
False
isinstance(acct, BankAccount)
True
Úvod do objektově orientovaného programování v Pythonu

Let's practice!

Úvod do objektově orientovaného programování v Pythonu

Preparing Video For Download...