Содержание
- 2. ООП Несмотря на то, что Python - мультипарадигменный язык (сочетает в себе элементы структурного, объектно-ориентированного и
- 3. Первое, что нужно помнить о Python ... в Python все является объектом! Строки - это объекты.
- 4. Динамическая типизация Python - это динамический язык с динамической системой типов. Однако, несмотря на наличие динамической
- 5. Утиная типизация Порой знатоки Питона напускают на себя таинственный вид и говорят об "Утиной типизации". Утиная
- 6. Утиная типизация Это один из видов динамической типизации при которой принадлежность объекта к тому или иному
- 7. Классы Так как Python поддерживает объектно-ориентированную парадигму программирования, это значит, что мы можем определить компоненты программы
- 8. Классы С точки зрения кода класс объединяет набор функций и переменных, которые выполняют определенную задачу. Функции
- 9. Пример Определим простейший класс Person, который будет представлять человека: class Person: name = "Tom" def display_info(self):
- 10. Пояснение Класс Person определяет атрибут name, который хранит имя человека, и метод display_info, с помощью которого
- 11. Конструктор В объектно-ориентированном программировании конструктором класса называют метод, который автоматически вызывается при создании объектов. Его также
- 12. Значения по умолчанию class Rectangle: def __init__(self, w = 0.5, h = 1): self.width = w
- 13. Конструкторы Так, выше когда мы создавали объекты класса Person, мы использовали конструктор по умолчанию, который неявно
- 14. class Person: # конструктор def __init__(self, name): self.name = name # устанавливаем имя def display_info(self): print("Привет,
- 15. Пояснение В качестве первого параметра конструктор также принимает ссылку на текущий объект - self. Нередко в
- 16. Деструктор После окончания работы с объектом мы можем использовать оператор del для удаления его из памяти:
- 17. Деструктор Кроме того, мы можем определить в классе деструктор, реализовав встроенную функцию __del__, который будет вызываться
- 18. class Person: # конструктор def __init__(self, name): self.name = name # устанавливаем имя def __del__(self): print(self.name,"удален
- 19. Определение классов в модулях и подключение Как правило, классы размещаются в отдельных модулях и затем уже
- 20. Определение класса В файле classes.py определим два класса: class Person: # конструктор def __init__(self, name): self.name
- 21. В дополнение к классу Person здесь также определен класс Auto, который представляет машину и который имеет
- 22. Подключение классов Подключение классов происходит точно также, как и функций из модуля. Мы можем подключить весь
- 23. Инкапсуляция Инкапсуляция — в ООП размещение в одном компоненте данных и методов, которые с ними работают.
- 24. Инкапсуляция class Person: def __init__(self, name): self.name = name # устанавливаем имя self.age = 1 #
- 25. Инкапсуляция Но в данном случае мы можем, к примеру, присвоить возрасту или имени человека некорректное значение,
- 26. Изменим выше определенный класс, определив в нем свойства: class Person: def __init__(self, name): self.__name = name
- 27. Инкапсуляция Для создания приватного атрибута в начале его наименования ставится двойной прочерк: self.__name. К такому атрибуту
- 28. Инкапсуляция Однако все же нам может потребоваться устанавливать возраст пользователя из вне. Для этого создаются свойства.
- 29. Инкапсуляция Для изменения возраста определено другое свойство: def set_age(self, value): if value in range(1, 100): self.__age
- 30. Аннотации свойств Выше мы рассмотрели, как создавать свойства. Но Python имеет также еще один - более
- 31. Перепишем класс с использованием аннотаций class Person: def __init__(self, name): self.__name = name # устанавливаем имя
- 32. @property def name(self): return self.__name def display_info(self): print("Имя:", self.__name, "\tВозраст:", self.__age) tom = Person("Tom") tom.display_info() #
- 33. @age.deleter def age(self): del self.__age метод вызывается при удалении свойства Потылицина Е.М.
- 34. Аннотации Во-первых, стоит обратить внимание, что свойство-сеттер определяется после свойства-геттера. Во-вторых, и сеттер, и геттер называются
- 35. Наследование Наследование позволяет создавать новый класс на основе уже существующего класса. Наряду с инкапсуляцией наследование является
- 36. Наследование Например, ранее был создан класс Person, который представляет человека. Предположим, нам необходим класс работника, который
- 37. Унаследуем класс Employee от класса Person class Person: def __init__(self, name, age): self.__name = name #
- 38. @property def name(self): return self.__name def display_info(self): print("Имя:", self.__name, "\tВозраст:", self.__age) class Employee(Person): def details(self, company):
- 39. Наследование Класс Employee полностью перенимает функционал класса Person и в дополнении к нему добавляет метод details().
- 40. Полиморфизм Полиморфизм является еще одним базовым аспектом объектно-ориентированного программирования и предполагает способность к изменению функционала, унаследованного
- 41. class Person: def __init__(self, name, age): self.__name = name # устанавливаем имя self.__age = age #
- 42. def display_info(self): print("Имя:", self.__name, "\tВозраст:", self.__age) class Employee(Person): # определение конструктора def __init__(self, name, age, company):
- 43. class Student(Person): # определение конструктора def __init__(self, name, age, university): Person.__init__(self, name, age) self.university = university
- 44. Полиморфизм В производном классе Employee, который представляет служащего, определяется свой конструктор. Так как нам надо устанавливать
- 45. Полиморфизм Поэтому в конструктор базового класса передаются имя и возраст. Сам же класс Employee добавляет к
- 46. Полиморфизм В основной части программы создается список из трех объектов Person, в котором два объекта также
- 47. Проверка типа объекта При работе с объектами бывает необходимо в зависимости от их типа выполнить те
- 48. Пример Например, возьмем выше описанную иерархию классов: for person in people: if isinstance(person, Student): print(person.university) elif
- 49. Проектирование программы В ООП очень важно предварительное проектирование. В общей сложности можно выделить следующие этапы разработки
- 50. Практика 1. Напишите программу по следующему описанию. Есть класс "Воин". От него создаются два экземпляра-юнита. Каждому
- 52. Скачать презентацию