Объекты и классы в Python: объясняем предельно просто

Это позволяет создавать несколько реализаций одной идеи. В ней есть класс «Транспорт» с методом «Двигаться». После выполнения метода самолет должен полететь, автомобиль — поехать, а корабль https://deveducation.com/ — поплыть. Все три действия — это движение, но реализованы они будут по-разному.

основные принципы ооп python

Типы данных в Python: полное руководство

основные принципы ооп python

Но вот атрибуты каждого экземпляра класса уникальны. Одним из самых больших преимуществ использования классов для организации данных является предсказуемость. Вы можете указать в __init__() любое количество параметров, но первым параметром всегда будет переменная с именем self. В Python конструктором является метод __init__(). В нем указываются все свойства, которыми должны обладать Ручное тестирование объекты класса Cat.

Чем объекты отличаются от классов

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

Объекты и классы в Python: объясняем предельно просто

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

Они показывают, что метод  __init__ принадлежит классу Cat, а атрибуты  self.name  и self.age принадлежат методу __init__. Например, на основании класса Cat можно создать объекты c именами Milo и Simba, а также возрастом — 2 и 3 года. Наследование позволяет сделать отдельный класс «Самолет», который будет наследником класса «Транспорт». Он сохраняет атрибуты класса «Транспорт» (год выпуска, цвет), но при этом получает новые — размах крыльев. Основные принципы ООП включают абстракцию, инкапсуляцию, наследование и полиморфизм. Вместе они составляют принцип работы любого объектно-ориентированного языка программирования, в том числе Python.

Они помещаются в класс для того, чтобы быть в пространстве имен, их используют для организационных целей. При вызове метода этот параметр указывает не на объект, а на сам класс. Такие методы не могут менять объекты по отдельности — как вы теперь знаете, для этого нужен параметр self. Но они могут менять состояние класса в целом, что влияет на все объекты этого класса. Но и дочерний класс изменяет функциональность родительского.

  • У каждого такого объекта есть характеристики и он выполняет определенные функции.
  • Создание объектов рассмотрим чуть позже, а пока вернемся к конструкторам.
  • Это можно заметить по методу whoisThis().
  • Он позволяет работать с отдельными объектами, а не всеми экземплярами, которые принадлежат классу.

Они имеют одинаковое значение для всех объектов. Вы можете определить атрибут класса, присвоив значение имени переменной за пределами метода __init__(). Создадим на его основе два объекта — экземпляра класса Cat. Второй объект — кошка Simba, ей три года. Это достигается благодаря ключевому слову self. Атрибуты, созданные в __init__(), называются атрибутами экземпляра.

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

Методы — функции, объявленные внутри тела класса. После этого мы объявили атрибуты — характеристики объекта. В примере выше тело класса состоит из одного оператора pass. Он нужен для того, чтобы интерпретатор Python не выдавал ошибку.

Если вы пьете кофе, то есть большая вероятность, что вы использовали кофемашину. Но вам не нужно знать, как она делает кофе. Все, что вам нужно знать, — какие кнопки нажимать, чтобы приготовить кофе. Вы используете интерфейс, определяемый кнопками, не беспокоясь о внутренней работе машины. Теперь разберемся, как написать класс и его объекты. Ключевым выводом здесь является то, что пользовательские объекты по умолчанию изменяемы.

Атрибуты класса определяются под первой строкой имени класса и имеют отступ в четыре пробела. Им всегда должно быть присвоено начальное значение. При создании экземпляра класса автоматически создаются атрибуты класса, которым присваиваются их начальные значения. После этого мы создаем экземпляры класса Parrot. Kesha и cookie — ссылки на (значения) наши новые объекты. Теперь вы можете создать двух кошек с разными именами и возрастом.

Суть объектно-ориентированного программирования (ООП) очевидно раскрывается в его названии. Эта парадигма предлагает представлять все компоненты программы как объекты из реальной жизни. У каждого такого объекта есть характеристики и он выполняет определенные функции.

Класс — это схема того, как что-то должно быть определено. На самом деле он не содержит никаких данных. Класс Cat указывает, что для определения кошки необходимы имя и возраст. Но он не содержит имя или возраст какой-либо конкретной кошки.

Это вы можете заметить по методу swim(). Метод класса __init__() имеет три параметра. Почему же в примере ему передаются только два аргумента? Когда вы создаете экземпляр объекта, Python создает новый объект и передает его первому параметру __init__(). Это по существу удаляет self, поэтому вам нужно беспокоиться только о параметрах name и age. На его основе вы будете создавать объекты — разные экземпляры класса.

Через некоторое время становится трудно поддерживать все эти объекты, не создавая при этом сложности.

Рассматривайте метод как кофеварку, а ваш входной параметр — как кнопки на машине. Абстракция позволяет создавать бесшовные программы, просто зная, какой метод вызывать и какие параметры вводить. Инкапсуляция — это набор свойств и методов одного класса или объекта. Для использование полиморфизма мы создали общий интерфейс — функцию flying_test(). В качестве аргумента она принимает любой объект, после чего происходит вызов его собственного метода fly().