2.18M
Категория: ПрограммированиеПрограммирование

Объектно-ориентированное программирование в Python. Наследование

1.

Тема лекции:
Объектно-ориентированное
программирование в Python.
Наследование

2.

Наследование позволяет новому классу
расширять существующий класс. Новый
класс
наследует члены расширяемого класса.

3.

Обобщение и конкретизация

4.

Наследование и отношение "род - вид"

5.

Наследование и отношение "род - вид"
Наследование связано с существованием надкласса и
подкласса.
Надкласс- это родовой класс, подкласс - это
конкретизированный
класс.
Подкласс
можно
представить, как расширенный вариант надкласса.
Подкласс наследует атрибуты и методы надкласса без
необходимости переписывать его атрибуты и методы.
Кроме того, в подкласс могут быть добавлены новые
атрибуты и методы, и именно это делает его
конкретизированным вариантом надкласса.
Надклассы также называются базовыми классами, а
подклассы - производными классами. Обе версии

6.

Пример использования наследования
Необходимо разработать программу, которую автодилер может использовать для
управления своими складскими запасами подержанных автомашин. Складские
ресурсы автодилера включают три типа автомашин: легковые автомобили, пикапы
и джипы. Независимо от типа автомобиля автодилер о каждом автомобиле
поддерживает приведенные ниже данные:
• фирма-изготовитель;
• модель указанного года выпуска;
• пробег;
• цена.
Каждый вид автотранспортного средства, который содержится среди складских
запасов, имеет эти общие свойства плюс свои специализированные свойства. Для
легковых автомобилей автодилер поддерживает следующие дополнительные
данные: число дверей (2 или 4).
Для пикапов автодилер поддерживает следующие дополнительные данные: тип
привода (моноприводный, т. е. с приводом на два колеса, или полноприводный, т. е.
с приводом на четыре колеса);
И для джипов автодилер поддерживает следующие дополнительные данные:
пассажирская вместимость.

7.

Пример использования наследования

8.

В программе приведен код класса Automobile, который содержится в модуле vehicles (автотранспортные
средства).

9.

10.

11.

В программе
приведен
соответствующий
программный код для
класса Car, который
тоже находится в
модуле vehicles.

12.

13.

14.

Класс car приведен в следующей программе:

15.

16.

Рассмотрим класс Truck, который тоже наследует от класса Automobile. Программный код для
класса Truck, который тоже находится в модуле vehicles, приведен в следующей программе:
Продолжение…

17.

18.

19.

Рассмотрим класс suv, который тоже наследует класс Automobile. Программный код для
класса suv, который тоже находится в модуле vehicles, представлен в следующей
программе:
Продолжение…

20.

21.

22.

Программа демонстрирует каждый из классов, которые были созданы ранее. Она создает объекты Car, Truck
и suv.
Продолжение…..

23.

24.

Полиморфизм
Полиморфизм позволяет подклассам иметь методы с теми же именами, что и у
методов в их надклассах. Это дает программе возможность вызывать правильный
метод в зависимости от типа объекта, который используется для его вызова.
Термин "полиморфизм" относится к способности объекта принимать различные
формы. Эта способность является мощным механизмом объектноориентированного программирования.
Рассмотрим два важнейших компонента полиморфного поведения.
• Возможность определять метод в надклассе и затем определять метод с тем же
именем в подклассе . Когда метод подкласса имеет то же имя, что и у метода
надкласса, часто говорят, что метод подкласса переопределяет метод надкласса.
• Возможность вызывать правильный вариант переопределенного метода в
зависимости от типа объекта, который используется для его вызова. Если объект
подкласса используется для вызова переопределенного метода, то исполнится
именно вариант метода подкласса. Если для вызова переопределенного метода
используется объект надкласса, то исполнится именно вариант метода надкласса.

25.

Полиморфизм
Переопределение метода в работе демонстрировалось ранее.
Все подклассы, исследованные ранее, имеют метод __init__(),
который переопределяет метод __init__() надкласса. Когда
создается экземпляр подкласса, автоматически вызывается
метод __init__() именно этого подкласса.
Переопределение методов работает и для других методов
класса.

26.

Пример полиморфизма:
В программе приведен код для
класса Mammal
(Млекопитающее), который
находится в модуле animals
(животные).

27.

28.

29.

30.

Программа демонстрирует класс Cat (Кот), который тоже находится в модуле
animals и является еще одним подклассом класса Mammal.

31.

32.

Функция isinstance

33.

34.

Что произойдет, если в эту функцию передать объект, который не является
млекопитающим Mammal и не является подклассом Mammal?

35.

36.

В программе показан способ ее применения в функции show_mammal_
info:
Продолжение..
English     Русский Правила