На этом шаге мы дадим понятие объекта.
Вам следует познакомиться с еще одним фундаментальным понятием, которое используется в Python, - понятием объекта. Объекты в чем-то схожи с повторно используемыми функциями, поскольку, однажды определив их, вы сможете впоследствии обращаться к ним множество раз. Но по сравнению с функциями объекты способны на гораздо большее.
Наилучший способ знакомства с объектами - это не обсуждение абстрактных понятий, а рассмотрение конкретного примера. Взгляните на следующий код.
# класс объектов Dog (собака) class Dog: # собаки могут лаять def bark(self): print("Гав!")
Начнем с того, с чем мы уже знакомы. Прежде всего, код включает функцию bark(). Как нетрудно заметить, при вызове данной функции она выведет слово "Гав!" Это довольно просто.
А теперь рассмотрим код в целом. Вы видите ключевое слово class, за которым следуют имя Dog (собака) и структура, напоминающая функцию. Вы сразу же можете провести параллели между этой структурой и определением функции, которое также снабжается именем. Отличаются же они тем, что для определения функций используется ключевое слово def, тогда как для определения объектов используется ключевое слово class.
Прежде чем углубиться в обсуждение того, какое отношение эта структура, называемая классом, имеет к объектам, вновь обратимся к простому, но реальному коду, который оживляет эти понятия.
sizzles = Dog()
sizzles.bark()
В первой строке создается переменная sizzles, источником которой является, судя по всему, вызов функции. В действительности Dog() - это особая функция, которая создает экземпляр класса Dog. Теперь вы увидели, как создавать различные сущности из определений классов. Эти сущности называются объектами. В данном случае мы создали из определения класса Dog объект sizzles и можем считать, что этот объект является собакой!
В следующей строке для объекта sizzles вызывается функция bark(). С этим вы уже немного знакомы, поскольку ранее успели поработать с функциями. Но вам нужно еще привыкнуть к тому, что функция bark() вызывается так, как если бы она была частью объекта sizzles. Это возможно, потому что данную функцию имеют все объекты, созданные на основе класса Dog, ведь именно в нем она и определена.
Опишем все это простыми словами. Мы создали переменную sizzles, разновидность класса Dog. Переменная sizzles - это объект, созданный по шаблону класса Dog. Объекты - это экземпляры класса.
Следующий пример показывает, что мы к этому времени успели сделать, и подтверждает, что функция sizzles.bark() действительно выводит слово "Гав!"
Рис.1. Результат вызова функции sizzles.bark()
Возможно, вы обратили внимание на непонятный элемент self в определении функции - bark(self). Он здесь для того, чтобы указывать Python, к какому объекту приписывается функция при ее создании. Это должно быть очевидным, поскольку определение функции bark() включено в определение класса, а значит, Python должен знать, к какому объекту ее следует прикрепить.
Рассмотрим примеры более полезного использования объектов и классов. Взгляните на следующий код.
sizzles = Dog() mutley = Dog() sizzles.bark() mutley.bark()
Рис.2. Создание двух объектов заданного класса и вызов с их использованием метода класса
Это уже интересно! Мы создали два объекта: sizzles и mutley. Важно понимать, что оба они были созданы на основе одного и того же определения класса Dog. Замечательно! Сначала мы определяем, как объекты должны выглядеть и как должны себя вести, а затем создаем их реальные экземпляры.
В этом и состоит суть различия между классами и объектами: первые представляют собой описания объектов, а вторые - реальные экземпляры классов, созданные в соответствии с этими описаниями. Класс - это рецепт приготовления пирога, а объект - сам пирог, изготовленный по данному рецепту. Процесс создания объектов на основе описания класса можно пояснить с помощью следующей наглядной иллюстрации.
На следующем шаге мы закончим изучение этого вопроса.