Similar presentations:
Lec1_Python_OOP
1. Объектно-ориентированный подход в Python
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙПОДХОД В PYTHON
Введение в ООП
2. Содержание
СОДЕРЖАНИЕ1.
2.
3.
4.
5.
6.
Классы
Объекты
Наследование
Полиморфизм
Инкапсуляция
Конструкторы
3. Концепция ООП
КОНЦЕПЦИЯ ООПОбъектно-ориентированное программирование (OOPs) - это
парадигма программирования, которая использует объекты и
классы в программировании со следующими целями:
o
реализация в программировании объектов реального
мира
и
их
свойств,
таких
как
наследование,
полиморфизмы, инкапсуляция и т.д.;
o
связь данных и функций, которые с ними работают, как
единое целое, чтобы никакая другая часть кода не могла
получить доступ к этим данным;
4. Класс
КЛАССКласс - это коллекция объектов. Класс содержит чертежи или прототип, на
основе которых создаются объекты. Это логическая сущность, содержащая
некоторые атрибуты и методы. И имеет следующие особенности:
o
Классы создаются с помощью ключевого слова class.
o
Атрибуты - это переменные, принадлежащие классу.
o
Атрибуты всегда являются общедоступными и к ним можно получить
доступ с помощью оператора точки (.). Например: Myclass.Myattribute
Пустой класс:
5. Объекты
ОБЪЕКТЫОбъект - это сущность, с которой связаны состояние и поведение. Объекты в состоянии
реализовать любой объект реального мира, такой как мышь, клавиатура, стул, стол,
ручка и т.д. Все что в Python используется – объекты.
Объект составляют следующие сущности:
o
Состояние: Оно представлено атрибутами объекта. Оно также отражает свойства
объекта.
o
Поведение: Оно представлено методами объекта. Оно также отражает реакцию
объекта на другие объекты.
o
Идентификация: она присваивает объекту уникальное имя и позволяет одному
объекту взаимодействовать с другими объектами.
Создание объекта
6. Self в классах Python
SELF В КЛАССАХ PYTHONo
Self представляет экземпляр класса или ссылку на объект. Используя “self”,
мы можем получить доступ к атрибутам и методам класса в Python.
o
Self
связывает
атрибуты
с
заданными
аргументами,
передаваемыми
инициализатором объекта.
o
Методы в Python организованы следующим образом:
o
Объект self, к которому принадлежит метод, передается
в него
автоматически;
o
self не принимается автоматически;
o
первым параметром методов является объект, для которого вызывается
метод;
7. Инициализация объектов
ИНИЦИАЛИЗАЦИЯ ОБЪЕКТОВo
Метод
__init__
аналогичен
конструкторам в C++ и Java.
o
Он запускается, как только создается
экземпляр объекта класса.
o
Метод
полезен
для
выполнения
любой инициализации, которую вы
хотите выполнить с вашим объектом.
8. Создание методов объектов классов.
СОЗДАНИЕ МЕТОДОВ ОБЪЕКТОВ КЛАССОВ.Класс Dog определяется двумя атрибутами и двумя
методами:
o
attr1 - это атрибут класса, имеющий значение
“mammal”. Атрибуты класса являются общими для
всех экземпляров класса.
o
__init__ - это специальный метод (конструктор),
который инициализирует экземпляр класса Dog. Он
принимает два параметра: self (ссылающийся на
создаваемый
экземпляр)
и
атрибут
name
(представляющий имя собаки).
o
Метод speak определен в классе Dog. Этот метод
выводит строку, содержащую имя объекта dog.
9. Наследование классов
НАСЛЕДОВАНИЕ КЛАССОВНаследование - это способность одного класса принимать или наследовать свойства от
другого класса. Класс, который наследует свойства, называется производным классом
или дочерним классом, а класс, из которого выводятся свойства, называется базовым
классом или родительским классом. Преимуществами наследования являются:
o
наследование хорошо отражает отношения объектов реального мира;
o
оно обеспечивает возможность повторного использования кода.
o
наследование позволяет нам добавлять больше функций в класс, не изменяя его.
o
транзитивность по своей природе, что означает, что если класс B наследуется от другого
класса A, то все подклассы B автоматически наследуются от класса A.
10. Типы наследования
ТИПЫ НАСЛЕДОВАНИЯo
Одиночное наследование: Одноуровневое наследование позволяет производному классу
наследовать характеристики от единственного родительского класса.
o
Многоуровневое наследование: Многоуровневое наследование позволяет производному
классу наследовать свойства от непосредственного родительского класса, который, в свою
очередь, наследует свойства от своего родительского класса.
o
Иерархическое
наследование:
Наследование
на
иерархическом
уровне
позволяет
нескольким производным классам наследовать свойства от родительского класса.
o
Множественное
наследование:
Многоуровневое
наследование
позволяет
производному классу наследовать свойства более чем от одного базового класса.
одному
11. Пример наследования
ПРИМЕР НАСЛЕДОВАНИЯродительский класс
дочерний класс
12. Методы при наследовании
МЕТОДЫ ПРИ НАСЛЕДОВАНИИo
Если объектов много вспомнить, который из
них принадлежит какому методу и содержит
какие значения трудно.
o
Для решения проблемы можно предусмотреть
методы для доступа к переменной (например,
getName())
и
принадлежности
isEmployee()).
метод
к
классу
определения
(например,
13. Функции issubclass() и isinstance()
ФУНКЦИИ ISSUBCLASS() И ISINSTANCE()o
issubclass(cls, class_or_tuple) возвращает,
является ли cls производным от другого
класса или является тем же классом.
Кортеж, как в issubclass(x, (A, B, ...)),
может быть указан в качестве цели для
проверки. Это эквивалентно issubclass(x,
A) or issubclass(x, B)
o
isinstance(obj,
возвращает,
class_or_tuple)
является
ли
объект
экземпляром класса или его подкласса.
14. Множественное наследование
МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕo
Для
множественного
наследования
нужно
указать в скобках наследуемые классы через
запятую
o
В конструкторе класса вызвать конструкторы
наследуемых классов для доступа к их данным
и методам.
15. Доступ к атрибутам родительского класса
ДОСТУП К АТРИБУТАМ РОДИТЕЛЬСКОГОКЛАССА
o Доступ к атрибуту родительского
класса
возможен
и
без
его
инициализации при использовании
имени класса
16. Функция super()
ФУНКЦИЯ SUPER()o
super()
->
то
же,
что
super(__class__,
<первый
аргумент>).
o
super(type) -> несвязанный суперкласс.
o
super(type, obj) -> связанный суперкласс; требуется
проверить isinstance (obj, type).
o
super(type, type2) -> связанный суперкласс; требуется
проверить issubclass(type2, type).
o
Типичное использование для вызова совместного
метода суперкласса:
class C(B):
def meth(self, arg):
super().meth(arg)
o
Это работает и для методов класса тоже:
class C(B):
@classmethod
def cmeth(cls, arg): super().cmeth(arg)
17. Функция super() и множество предков
ФУНКЦИЯ SUPER() И МНОЖЕСТВО ПРЕДКОВo При множественном наследовании
super()
предков
вызывает
в
классы
всех
последовательности
указанной в параметрах в круглых
скобках.
18. Функция super() и иерархия предков
ФУНКЦИЯ SUPER() И ИЕРАРХИЯ ПРЕДКОВo При иерархическом наследовании
super()
предков
вызывает
в
классы
всех
последовательности
обратной наследованию.
19. Метод порядка разрешения MRO
МЕТОД ПОРЯДКА РАЗРЕШЕНИЯ MROo
У объекта class
в Python
есть встроенные методы и
атрибуты, которые можно
посмотреть функцией dir().
o
В
частности
есть
метод
mro(),
который
может
вывести
порядок
разре-
шения
в
последовате-
льности обратной наследованию.
20. Полиморфизм
ПОЛИМОРФИЗМo
Полиморфизм просто означает наличие множества
форм.
o
Например, нам нужно определить, летает данный вид
птиц или нет, используя полиморфизм, мы можем
сделать это с помощью одной функции.
o
Пример кода демонстрирует концепцию наследования
и переопределения методов в классах.
o
Подклассы
могут
переопределять
определенные
в
родительском
обеспечения
их
определенного
методы,
классе,
поведения,
все
наследуя другие методы от родительского класса.
для
еще
21. Инкапсуляция данных
ИНКАПСУЛЯЦИЯ ДАННЫХИнкапсуляция - одна из фундаментальных концепций объектно-ориентированного
программирования (ООП). В чем суть:
o
Объединение данных и методов, которые работают с данными в рамках одного модуля.
o
Это накладывает ограничения на прямой доступ к переменным и методам и может
предотвратить случайную модификацию данных.
o
Чтобы предотвратить случайное изменение, переменная объекта может быть изменена
только методом объекта.
o
Эти типы переменных известны как приватные переменные. Класс является примером
инкапсуляции, поскольку он инкапсулирует все данные, которые являются функциямичленами, переменными и т.д.
22. Пример инкапсуляции
ПРИМЕР ИНКАПСУЛЯЦИИo
Для
создания
скрытого
атрибута
используется
двойное нижнее подчеркивание перед его именем.
o
При этом атрибут не будет доступен ни через объект
этого класса, ни через использование в наследуемом
классе.
23. Пример не полной инкапсуляции
ПРИМЕР НЕ ПОЛНОЙ ИНКАПСУЛЯЦИИo
Для
создания
защищенного
(protected)
атрибута используется нижнее подчеркивание
перед его именем.
o
При этом атрибут будет доступен и через
объект этого класса, и через использование в
наследуемом классе, но при инициализации
объекта будет принимать одинаковое значение
24. Пример доступа к скрытым данным
ПРИМЕР ДОСТУПА К СКРЫТЫМ ДАННЫМo
Python не делает полное скрытие данных
o
Доступ к данным можно получить через _имя класса
25. Печать объектов
ПЕЧАТЬ ОБЪЕКТОВo
Объекты
можно
печатать
функцией
print()
o
Вывод информации об объекте при этом
можно
переопределить
используя
методы:
o
o
__str__()
o
__repr__() для печати в контейнере
Если же __str()__ не определен, то
используется __repr()__.
26. Спасибо за внимание!!!
СПАСИБО ЗА ВНИМАНИЕ!!!Вопросы
programming