Dziedziczenie klas

Wprowadzenie do programowania obiektowego w Pythonie

George Boorman

Curriculum Manager, DataCamp

Ponowne użycie kodu

 

1. Ktoś już to zrobił

 

  • Pakiety sprawdzają się przy stałej funkcjonalności
  • OOP doskonale nadaje się do dostosowywania funkcjonalności

loga kilku pakietów Pythona

Wprowadzenie do programowania obiektowego w Pythonie

Ponowne użycie kodu

 

1. Ktoś już to zrobił

 

2. DRY: Don't Repeat Yourself

różne elementy GUI

Wprowadzenie do programowania obiektowego w Pythonie

Ponowne użycie kodu

 

1. Ktoś już to zrobił

 

2. DRY: Don't Repeat Yourself

nie używaj różnych elementów GUI

Wprowadzenie do programowania obiektowego w Pythonie

Dziedziczenie

 

$$\Large{\text{Nowa funkcjonalność klasy = Stara funkcjonalność klasy + dodatki}}$$

Wprowadzenie do programowania obiektowego w Pythonie

Przykładowa hierarchia

Klasa BankAccount

Wprowadzenie do programowania obiektowego w Pythonie

Przykładowa hierarchia

SavingsAccount dziedziczący po BankAccount

Wprowadzenie do programowania obiektowego w Pythonie

Przykładowa hierarchia

CheckingAccount również dziedziczący po BankAccount

Wprowadzenie do programowania obiektowego w Pythonie

Przykładowa hierarchia

CheckingAccount ma zmodyfikowaną metodę withdraw

Wprowadzenie do programowania obiektowego w Pythonie

Implementacja dziedziczenia klas

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: klasa nadrzędna, której funkcjonalność jest rozszerzana/dziedziczona
  • SavingsAccount: klasa podrzędna/pochodna, która dziedziczy funkcjonalność i rozszerza ją
Wprowadzenie do programowania obiektowego w Pythonie

Klasa podrzędna zawiera wszystkie dane klasy nadrzędnej

# 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)
Wprowadzenie do programowania obiektowego w Pythonie

Dziedziczenie: relacja „jest rodzajem"

SavingsAccount jest rodzajem BankAccount

(ewentualnie z dodatkowymi funkcjami)

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
Wprowadzenie do programowania obiektowego w Pythonie

Czas na ćwiczenia!

Wprowadzenie do programowania obiektowego w Pythonie

Preparing Video For Download...