Программирование на Python Урок 6. Принципы ООП. Классы, объекты, поля и методы. Уровни доступа.

Можно сказать, что объектно-ориентированное программирование позволяет смоделировать реальный объект в виде программного. Методы класса являются чем-то средним между обычными методами (привязаны к объекту) и статическими методами (привязаны только к области видимости). Как легко догадаться из названия, такие методы тесно связаны с классом, в котором они определены. Поля и методы, которые описываются программистом в теле класса, являются пользовательскими и добавляются в общий список атрибутов наряду со встроенными атрибутами. Все объекты создаются по одному шаблону, то есть на выходе обязательно будут машины, никаких велосипедов и мотоциклов. Они будут выкрашены в какой-то цвет, ехать они будут за счет наличия в них двигателя, скорость будет регулироваться с помощью коробки передач.

принципы ооп python

В Python существует огромное количество специальных методов, расширяющих возможности пользовательских классов. Например, можно определить вид объекта на печати, его “официальное” строковое представление или поведение при сравнениях. Узнать о них подробнее вы можете в официальной документации языка. И последнее — мы должны позволить пользователям увеличивать возраст кота. Для этого воспользуемся @age.setter и ещё раз объявим метод age, а внутри него напишем простое условие и вернём значение атрибута. Нам всё ещё нужно получать доступ к атрибутам, поэтому мы предоставляем его через @property и объявляем для каждого атрибута свой метод — breed, color, age.

Уровни доступа в Python

В основе сериализации объекта стоит представление его состояния. По умолчанию состояние объекта — это все, что записано в его полях. Пользовательские классы могут управлять сериализацией, предоставляя состояние объекта явным образом (методы __getstate__, __setstate__ и др.). Последний из методов — .__str__() — отвечает за представление экземпляра класса при печати оператором print и в других подобных случаях. В соответствии с принципом единственной ответственности класс должен решать лишь какую-то одну задачу. Он же решает две, занимаясь работой с хранилищем данных в методе saveAnimal и манипулируя свойствами объекта в конструкторе и в методе getAnimalName.

принципы ооп python

Имеет модификатор доступа, более строгий, чем у родительского класса. Предпочтительнее разделять интерфейсы на более мелкие тематические, чтобы реализующие их классы не были вынуждены определять методы, которые непосредственно в них не используются. Здесь мы передаем 2088 как значение для модели, однако, если вы введете значение для атрибута модели через функцию get_car_model(), вы увидите 2018 в выдаче.

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

Абстракция – принцип ООП, согласно которому объект характеризуется свойствами, которые отличают его от всех остальных объектов и при этом четко определяют его концептуальные границы. Как мы уже сказали, на текущий момент ООП является самой востребованной и распространенной парадигмой программирования. Концепция ООП строится на основе 4 принципов, которые мы предлагаем вам кратко рассмотреть. Как результат – код становится проще и читабельней. Многие методы встроенных объектов можно эмулировать.

Это потому, что им нужен экземпляр, прежде чем их можно будет использовать. Нам необходимо настроить учетную запись, прежде чем мы будем вносить на нее деньги. Это отражено в аргументе self , который принимает каждый из этих методов. Self обозначает экземпляр, конкретную учетную запись, на которую мы вносим депозит или с которой мы снимаем средства. Свойства, которыми должны обладать все объекты Dog, определяются в методе под названием .__init__(). Каждый раз, когда создается новый объект Dog, .__init__() устанавливает начальное состояние этого объекта, присваивая значения свойств объекта.

Метод __str__ вызывается, когда объект передается в функцию print или в форматированную строку, и служит для “неформального” представления объекта. Метод __repr__ должен возвращать строку, которая содержит всю информацию о состоянии объекта и по которой объект может быть восстановлен. Если определен только метод __repr__, то он будет вызываться в функции print вместо метода __str__. Как и следовало ожидать, статический метод не имеет аргумента self. Декораторы — это инструмент python, позволяющий менять поведение функций. Технически — это функция, которая принимает на вход некоторую функцию, и возвращает новую функцию с тем же набором аргументов.

  • Относится к высокоуровневным «способам общения» с программным обеспечением и различными устройствами.
  • Хорошим стилем является описание всех контрактов функции или метода в его строке комментария.
  • ООП основывается на идее, что код и данные, используемые этим кодом, должны храниться в одном месте.
  • Мы можем использовать отличный подход к полиморфизму с классом Square .

То же самое можно решить какими-нибудь неймспейсами и структурами данных. Мы рассмотрели ситуацию, когда два класса унаследованы от общего потомка. Но в некоторых языках можно сделать и наоборот — унаследовать один класс от двух и более родителей, объединив их свойства и поведение. принципы ооп python Возможность наследоваться от нескольких классов вместо одного — это множественное наследование. Еще одно важное отличие наследования от композиции в том, что наследование имеет статическую природу и устанавливает отношения классов только на этапе интерпретации/компиляции.

Например, у всех хищников есть метод «охотиться», поэтому все животные, которые являются хищниками, автоматически будут уметь охотиться. Этот принцип позволяет применять одни и те же команды к объектам разных классов, даже если они выполняются по-разному. Например, помимо класса «Кошка», у нас есть никак не связанный с ним класс «Попугай» — и у обоих есть метод «спать». Несмотря на то что кошки и попугаи спят по-разному (кошка сворачивается клубком, а попугай сидит на жёрдочке), для этих действий можно использовать одну команду. Ключевыми понятиями объектно-ориентированного программирования являются “класс” и “объект”. В языке программирования Python такие объекты принято называть экземплярами.

Классы / объекты Python

Статический метод определен с помощью декоратора @staticmethod. Он принимает любые параметры в любых количествах, кроме self и cls. Статические методы не меняют состояние ни класса, ни объекта.

принципы ооп python

Она нужна для загрузки схемы в качестве экземпляра какого-либо класса. Следовательно, в нашем случае она нужна для генерации экземпляров User. Метод make реализует экземпляр с помощью атрибутов. Используйте атрибуты класса для определения свойств, которые должны иметь одинаковое значение для каждого экземпляра класса. Начинка класса готова, теперь можно переходить к созданию объектов.

Инкапсуляция изменяющегося кода

При этом при вызове метода display_info не надо передавать значение для параметра self. — определенный пользователем прототип для объекта, который определяет набор атрибутов, которые характеризуют любой объект класса. Атрибутами являются члены данных (переменные класса и переменные экземпляра) и методы, доступ к которым осуществляется через точечную запись.

Другие специальные методы

Воспользуйтесь алгоритмом, по которому переменные и методы по умолчанию имеют спецификатор private. Затем шаг за шагом увеличиваете доступ при необходимости (с private на protected, с protected на public). Преимущество этого принципа ООП заключается в том, что инкапсулированный код легко тестировать и поддерживать. Теперь запустите файл Python и поэкспериментируйте с созданными вами классами.

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

Поскольку у нас уже есть объекты, с которыми можно работать, будет легко абстрагировать их в классе. Давайте представим класс Human , который имеет уникальный атрибут с именем _height . Вы можете изменять этот атрибут только в пределах определенных ограничений (почти невозможно быть выше 3 метров). Наследование позволяет нам определять несколько подклассов из уже определенного класса.

Он практически идентичен классу «Кошка», но у него появляются новые атрибуты «хозяин» и «кличка», а также метод «клянчить вкусняшку». Получаемая при сериализации строка может быть передана по сети, записана в файл или специальное хранилище объектов, а позже — прочитана. Некоторые объекты (например, https://deveducation.com/ классы и функции) представляются своими именами, поэтому для десериализации требуется наличие тех же самых классов. Нужно отметить, что нельзя десериализовать данные из непроверенных источников с помощью модуля pickle, так как при этом возможны практически любые действия на локальной системе.

Отсюда следует второй принцип ООП — инкапсуляция кода, который с большой вероятностью будет изменён в будущем. Например, один и тот же код не подойдёт для проверки OrderId и SSN. Их форматы могут не совпадать, и на выходе функция выдаст некорректный результат. В качестве решения можно предусмотреть в методе проверку форматов для подобных наборов чисел.

Объектно-ориентированное программирование помогает представлять содержимое программы наиболее естественным для нашего мира способом. Все классы являются общими — код можно использовать повторно. После этого мы объявили атрибуты — характеристики объекта. ООП предлагает писать код, который можно использовать повторно. Такой принцип называется DRY (don’t repeat yourself, «не повторяйся»). В свою очередь, это неизбежно ведет к возникновению множества ошибок и снижает читаемость кода программы.