На Горох
Информатика, 11 класс

§ 47. Объекты и классы

"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 47. Объекты и классы

Кратко о теме

Класс в Python задаёт общий шаблон для сущностей программы, а объект — конкретный экземпляр этого шаблона со своими данными. Например, класс Круг описывает, что у круга есть радиус и способ вычислить площадь, а объекты этого класса могут представлять круги разных размеров. Атрибуты хранят состояние объекта, методы задают связанные с ним действия. Понимание этой связи помогает создавать программы, которые удобно описывают реальные сущности и операции с ними.

Объяснение темы

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

Определения и обозначения

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

Класс — описание общего устройства объектов: какие данные они могут хранить и какие действия выполнять. Класс задаёт шаблон, по которому программа создаёт экземпляры. Благодаря этому можно описать общие свойства сущностей один раз, а затем создавать сколько угодно конкретных объектов.

Атрибут — характеристика объекта или класса, в которой хранится значение данных. Например, координаты x и y — атрибуты точки, а радиус — атрибут круга. Атрибут экземпляра относится к конкретному объекту, тогда как атрибут класса может быть общим для всех его экземпляров.

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

Как это устроено

Класс задаёт общие правила, а каждый созданный экземпляр получает собственное состояние — набор актуальных значений его данных. Поэтому два объекта одного класса могут выглядеть по-разному в программе: у одного точки координаты x = 2 и y = 5, у другого x = −1 и y = 4. Общим остаётся устройство объектов и доступные им методы, а значения атрибутов экземпляров различаются. Это позволяет одной программе работать с множеством похожих, но не одинаковых сущностей.

В Python класс объявляют ключевым словом class, после которого указывают имя и тело класса. Например, запись class Точка: начинает описание класса Точка. Чтобы получить экземпляр, вызывают имя класса с круглыми скобками: точка1 = Точка(). Скобки означают создание объекта и позволяют передать начальные данные, если класс предусматривает параметры.

При создании экземпляра обычно автоматически вызывается специальный метод __init__. Его параметры принимают начальные значения, а тело метода сохраняет их в атрибутах нового объекта. Например, __init__(self, x, y) может присвоить координаты выражениями self.x = x и self.y = y. Такой конструктор помогает сразу создать объект в осмысленном состоянии, а не назначать его данные отдельными командами позже.

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

Когда программу записывают как объект.метод(), Python автоматически передаёт объект в метод первым аргументом — в параметр self. Например, круг.площадь() запускает метод для объекта круг, и метод читает значение self.radius именно этого круга. Метод может только вернуть результат или изменить состояние, присвоив новое значение атрибуту. Если вызвать его у другого экземпляра, он будет работать с данными второго объекта.

Класс и объект в программе

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

ПризнакКлассОбъект (экземпляр)
Что представляетОбщий шаблон устройства объектовКонкретную сущность, созданную по шаблону
Как создаётся или задаётся в PythonОбъявляется с помощью classСоздаётся вызовом класса с круглыми скобками
Какие данные описывает или хранитОписывает возможные атрибуты; может иметь собственные атрибуты классаХранит значения атрибутов конкретного экземпляра
Как связаны с ним методыВ теле класса задаются методыМетоды вызываются для объекта и могут обращаться к его данным
Могут ли значения атрибутов различатьсяЗадаёт общие правила, но не конкретные данные каждого экземпляраДа, значения атрибутов экземпляров могут быть разными

Разбор задач

Точка с заданными координатами

Условие: создать класс Точка с атрибутами x и y, затем создать объект с координатами (2, 5). Нужно отделить общее описание от конкретных данных. Значения координат следует передать при создании, чтобы у экземпляра сразу было задано положение.

  1. Определяем класс Точка: он задаёт, что у точки будут координаты x и y.
  2. Добавляем __init__(self, x, y), чтобы получить координаты при создании экземпляра.
  3. Сохраняем значения командами self.x = x и self.y = y.
  4. Создаём объект выражением точка = Точка(2, 5).

Ответ: у объекта точка атрибут x равен 2, а атрибут y равен 5. Сам класс Точка не является этой конкретной точкой: он описывает устройство всех создаваемых точек. Если создать ещё один экземпляр с другими аргументами, его координаты будут собственными.

Площадь двух кругов

Условие: описать класс Круг, задавать радиус при создании и вычислять площадь методом; создать два круга разных размеров. Площадь круга вычисляется по формуле πr², где r — радиус. Метод должен использовать радиус того экземпляра, для которого его вызвали.

  1. В классе задаём __init__(self, радиус) и сохраняем параметр как self.радиус.
  2. Создаём метод площадь(self), который возвращает π · self.радиус².
  3. Создаём круг1 = Круг(2) и круг2 = Круг(5), передавая разные начальные значения.
  4. Вызываем круг1.площадь() и круг2.площадь(); каждый вызов использует собственный радиус.

Ответ: площади равны 4π и 25π соответственно. Один класс задаёт общую формулу и структуру, а экземпляры хранят разные радиусы. Метод не нужно переписывать для каждого размера круга: достаточно вызвать его у нужного объекта.

Счёт с пополнением и снятием

Условие: создать класс Счёт с начальным балансом и методами пополнения и снятия денег, выполнить операции и проверить результат. Баланс — состояние конкретного счёта, поэтому методы должны менять атрибут текущего экземпляра. Для ясности будем считать, что сумма снятия не превышает баланс.

  1. В __init__(self, баланс) сохраняем начальную сумму как self.баланс.
  2. Метод пополнить(self, сумма) увеличивает баланс: self.баланс = self.баланс + сумма.
  3. Метод снять(self, сумма) уменьшает его на указанную сумму.
  4. Создаём счёт со 100 единицами, пополняем на 30 и снимаем 20; затем проверяем атрибут баланса.

Ответ: после операций баланс равен 110. Если создать второй счёт, его начальный баланс будет отдельным значением; операции с первым счётом сами по себе его не изменят. Проверить это можно, выведя атрибуты обоих экземпляров после вызовов методов.

Типичные ошибки

Ошибка: считать класс и объект одним и тем же. Класс описывает общий шаблон, а объект является его конкретным экземпляром с собственными данными. Такое смешение возникает, когда название класса принимают за уже созданную сущность. Проверьте себя: если для работы нужны конкретные координаты или баланс, найдите вызов класса, который создаёт экземпляр.

Ошибка: забывать self в параметрах метода. При вызове через объект Python передаёт этот объект автоматически, поэтому методу нужен параметр, который его примет. Без self вызов может закончиться ошибкой о числе аргументов. Проверьте объявление: у метода экземпляра первым параметром обычно стоит self, даже если при вызове его не пишут.

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

Ошибка: полагать, что изменение атрибута одного экземпляра меняет его у всех объектов. Обычно атрибуты экземпляров содержат отдельные значения, поэтому изменение состояния одного объекта не переносится на другой. Это заблуждение появляется из-за того, что экземпляры созданы по одному классу. Проверьте поведение, создав два объекта и изменив атрибут только у первого, а затем сравнив оба значения.

Связь с другими темами

Для работы с классами полезны переменные, функции, параметры и вызов функций в Python. Атрибуты хранят значения, параметры передают данные при создании объектов, а методы устроены как функции внутри класса. Понимание этих основ помогает проследить, откуда берутся данные и как они изменяются.

Классы и объекты применяют при создании программ, моделирующих реальные сущности: точки, круги, счета и многое другое. Изучение классов служит основой объектно-ориентированного программирования, в котором программу строят из взаимодействующих объектов. Такой подход особенно полезен, когда у сущностей есть собственное состояние и набор действий.

Что запомнить

  • Класс описывает устройство объектов, а объект является конкретным экземпляром класса.
  • У разных экземпляров одного класса могут быть разные значения атрибутов.
  • Атрибут хранит данные, связанные с объектом или классом.
  • Метод задаёт действие, связанное с классом.
  • Метод __init__ обычно задаёт начальные значения атрибутов объекта.
  • Параметр self обозначает текущий экземпляр.

Частые вопросы по теме

Чем объект отличается от класса?

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

Могут ли объекты одного класса иметь разные значения атрибутов?

Да. Например, у двух объектов класса Круг могут быть радиусы 2 и 5. Значения атрибутов экземпляров хранятся отдельно, поэтому изменение радиуса одного круга обычно не меняет радиус другого.

Зачем нужен метод __init__?

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

Что означает параметр self?

self обозначает текущий экземпляр — тот объект, для которого вызван метод. С его помощью метод обращается к атрибутам и другим методам именно этого объекта.

Чем метод отличается от обычной функции?

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

Спросить по теме параграфа

§ 47. Объекты и классы

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
11 класс
Учебник
"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.