ООП: создание и работа с классами в Python

ООП: создание и работа с классами в Python

Введение

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

Класс — это набор данных и методов по работе с ними. Так звучит самое корректное и общепринятое определение. Если по-простому, то класс — это «что-то с чем-то» или «коктейль». Коктейль состоит из ингредиентов. Определённые объёмы коктейля можно использовать для создания других коктейлей. И так далее… вариантов интерпретации понятия «класс» — тьма. В итоге класс является типом данных. Новый класс — новый тип.

Объект — это единица чего-либо, которую можно рассматривать как самостоятельный и достаточный компонент.  Звучит сложно, но на деле проще показать. Возьмём заезженный пример — автомобиль.

ООП: создание и работа с классами в Python

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

Метод — это некий однозначный способ обработки данных.


Аналогия

Для наиболее полного понимания используем аналогию. Класс — это автомобиль. Объект — это трактор или гоночный болид или Chevrolet Camaro. Каждый трактор — автомобиль, но не каждый автомобиль — трактор. Согласитесь, автомобиль на изображении выше совсем не похож на трактор, но при этом они оба являются автомобилями.

Что объединяет два этих автомобиля? Они оба могут ехать вперёд и назад, поворачивать направо и налево, иметь сидение для водителя, бибикать. Есть сходства — есть и различия. В тракторе одно сиденье, а в Camaro два. У трактора большие колёса, а у Camaro среднего размера. У трактора передние и задние колёса разные по размеру, у Camaro все четыре колеса одинаковые по размеру. Один класс может служить основой для другого класса.

ООП: создание и работа с классами в Python


Создание своего класса

Для создания своего класса в Python используется конструкция, началом которой является служебное слово class. Сначала прописывается служебное слово, затем имя класса. В Python классы принято именовать словами с заглавной буквы разделёнными между собой символом нижнего подчёркивания.

Создадим класс делает ровным счётом ничего

Так объявляется класс.

Добавим в наш класс несколько полей и методов, которые будут взаимодействовать с этими данными и один метод, который будет как Дядя Фёдор из великого мультфильма — сам по себе.

Поле класса — это переменная, которая создаётся с инициализацией класса.

Метод класса — это функция в контексте ООП.

Значения полей заданы как None, это значит, что там ничего нет. Согласно философии Python все переменные должны быть объявлены, поэтому, чтобы не присваивать числовое значение по умолчанию мы присвоим «пустоту».


Сеттеры и геттеры

Названия методов, которые записывают значение в поле и берут значение поля, начинаются с set и get. Это так называемые сеттеры и геттеры. Это общепринятые термины, которые используются для однозначного описания конкретных процессов. Если записываем, то используем сеттер (set), если берём, то используем геттер (get). На одно поле используется один сеттер и один геттер. Но не обязательно использовать их оба, если поле является константой, то сеттер попросту не требуется.

Есть возможность обратиться к полю по его имени через точку, но такой подход является небезопасным. Изменение может произойти в любой момент времени и контролировать данный процесс возможно только через реализацию геттеров и сеттеров для каждого поля класса, где это необходимо. Не стоит писать их, если они не требуются.

В каких случаях создание сеттеров и/или геттеров не нужно?

  • если в поле хранится неизменяемое значение (константа)
  • если поле используется внутренними механизмами класса

Вызов методов класса

Для вызова методов класса необходимо:

  • создать объект класса «My_class»
  • через точку обращаться к методам класса

В консоле получим

  • Значение 3 является значением поля right_value
  • Значение None является значением поля left_value, значение None было присвоено изначально и оно не изменилось из-за того…
    • … что мы передали символ тройки, а не число
    • … в сеттере есть валидация (проверка) на принадлежность к числовому типу
  • Значение 45 является результатом сложения 43 и 2

Вот так вот просто можно создавать классы и их поля с методами.

Post Author: Nikulux

Добавить комментарий