Объектно-ориентированный подход в Python
Содержание
Концепция ООП
Класс
Объекты
Self в классах Python
Инициализация объектов
Создание методов объектов классов.
Наследование классов
Типы наследования
Пример наследования
Методы при наследовании
Функции issubclass() и isinstance()
Множественное наследование
Доступ к атрибутам родительского класса
Функция super()
Функция super() и множество предков
Функция super() и иерархия предков
Метод порядка разрешения MRO
Полиморфизм
Инкапсуляция данных
Пример инкапсуляции
Пример не полной инкапсуляции
Пример доступа к скрытым данным
Печать объектов
Спасибо за внимание!!!
800.07K
Category: programmingprogramming

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 В КЛАССАХ PYTHON
o
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

МЕТОД ПОРЯДКА РАЗРЕШЕНИЯ MRO
o
У объекта 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. Спасибо за внимание!!!

СПАСИБО ЗА ВНИМАНИЕ!!!
Вопросы
English     Русский Rules