У меня есть к вам такой вопрос: чем отличается класс от объекта? Это же одно и то же, разве нет? Нет. Или все-таки да? В предыдущем видео я же прямо говорил, что класс в языке Python — это объект. Этот вопрос действительно может поставить в тупик многих начинающих программистов. И, давайте, в нем внимательно разберемся. Начнем с объекта, так как это более знакомое нам понятие, более часто используемое. Объектами мы пользуемся с тех самых пор, как мы запустили самую первую нашу программу на этом замечательном языке. Все, что в этом языке есть — это объекты. Каков же жизненный путь объекта? Каждый объект в начале своего существования создается в памяти, далее происходит его инициализация вызовом метода init. Обращаю особое внимание, данный метод не создает объект в памяти, а лишь проводит его инициализацию. Ссылка на этот объект сохраняется в некоторую переменную. После этого мы можем свободно пользоваться нашим объектом, обращаясь к нему по ссылке. Мы можем использовать методы этого объекта, изменять его, мы можем просматривать его состояние. Но что же происходит в тот момент, когда из программы исчезает последняя ссылка на некоторый объект? В этот момент мы теряем возможность как либо взаимодействовать с этим объектом и здесь возможна одна из двух ситуаций: у каждого объекта есть счетчик внешних ссылок на него, когда мы удаляем ссылку, значение этого счетчика уменьшается на единицу, если значение счетчика достигает нуля, то объект будет удален с использованием механизма DECrew. Более сложная ситуация с объектами, у которых счетчик ссылок не достиг нуля, они остаются в памяти до тех пор, пока к ним не придет Garbage Collector. Он позволяет освободить память от объектов, на которые нету внешних ссылок из программы. При этом он может находить объекты, которые ссылаются друг на друга, но не имеют внешних ссылок и удалять такие объекты. Это позволяет программисту более эффективно использовать память и не засорять ее лишними объектами. Однако сборщик мусора программист должен вызывать самостоятельно. Итак, с объектами мы разобрались, но что же тогда есть класс? Мы поговорили, что у объекта есть различные методы, переменные. Иными словами, у него есть некоторая структура, которой этот объект обладает. Класс же это, по сути, описание этой самой структуры объекта. В нем написано, какие будут переменные у объекта, что он будет делать, каким образом он будет создаваться в памяти, что необходимо сделать при его удалении и многое-многое другое. Таким образом, объект — это некоторая структура хранящаяся в памяти компьютера и обладающая определенным поведением. Класс же — это описание структуры и свойств объекта. ОК, мы разобрались с тем, что такое объект и что такое класс. Остается разобраться с самым странным утверждением, что класс это объект. Я говорил это утверждение в предыдущем видео. Будем исходить из того, что язык Python является полностью объектным и в нем существует некоторый объект-класс, который позволяет хранить информацию о других объектах. В нем хранится информация о том, что сможет сделать некоторый объект, как он будет создан. Кроме того, он может самостоятельно создавать объекты других типов. Давайте, подведем итоги. Объект, класс и объект-класс это три совершенно разные вещи. Объект — это некоторая структура, которая хранится в памяти, имеет некоторое состояние, умеет его изменять, умеет взаимодействовать с окружающим миром, с другими объектами при помощи методов. Класс — это способ описания объекта. В нем описано, каким образом создается некоторый объект, какая у него будет функциональность, а объект-класс — это такое понятие, характерное для некоторых языков программирования. Это такой объект, который и хранит в себе информацию о способе создания и возможностях некоторого другого объекта. Кроме того, он умеет самостоятельно порождать другие объекты. В следующем видео мы разберемся с еще двумя понятиями, которые иногда путают, это интерфейс и реализация.