Наследование классов

Введение в объектно-ориентированное программирование на Python

George Boorman

Curriculum Manager, DataCamp

Повторное использование кода

 

1. Кто-то уже сделал это за нас

 

  • Пакеты отлично подходят для фиксированной функциональности
  • ООП отлично подходит для настройки функциональности

логотипы нескольких пакетов Python

Введение в объектно-ориентированное программирование на Python

Повторное использование кода

 

1. Кто-то уже сделал это за нас

 

2. DRY: Don't Repeat Yourself

различные элементы графического интерфейса

Введение в объектно-ориентированное программирование на Python

Повторное использование кода

 

1. Кто-то уже сделал это за нас

 

2. DRY: Don't Repeat Yourself

не используйте различные элементы GUI

Введение в объектно-ориентированное программирование на Python

Наследование

 

$$\Large{\text{New class functionality = Old class functionality + extra}}$$

Введение в объектно-ориентированное программирование на Python

Пример иерархии

класс BankAccount

Введение в объектно-ориентированное программирование на Python

Пример иерархии

SavingsAccount наследует от BankAccount

Введение в объектно-ориентированное программирование на Python

Пример иерархии

CheckingAccount также наследует от BankAccount

Введение в объектно-ориентированное программирование на Python

Пример иерархии

В CheckingAccount переопределён метод withdraw

Введение в объектно-ориентированное программирование на Python

Реализация наследования классов

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: родительский класс, функциональность которого расширяется/наследуется
  • SavingsAccount: дочерний/подкласс, который наследует функциональность и добавляет новую
Введение в объектно-ориентированное программирование на Python

Дочерний класс содержит все данные родительского

# 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)
Введение в объектно-ориентированное программирование на Python

Наследование: отношение «является»

SavingsAccount является BankAccount

(возможно, с дополнительными возможностями)

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
Введение в объектно-ориентированное программирование на Python

Давайте потренируемся!

Введение в объектно-ориентированное программирование на Python

Preparing Video For Download...