"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.
Класс в 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). Нужно отделить общее описание от конкретных данных. Значения координат следует передать при создании, чтобы у экземпляра сразу было задано положение.
Ответ: у объекта точка атрибут x равен 2, а атрибут y равен 5. Сам класс Точка не является этой конкретной точкой: он описывает устройство всех создаваемых точек. Если создать ещё один экземпляр с другими аргументами, его координаты будут собственными.
Условие: описать класс Круг, задавать радиус при создании и вычислять площадь методом; создать два круга разных размеров. Площадь круга вычисляется по формуле πr², где r — радиус. Метод должен использовать радиус того экземпляра, для которого его вызвали.
Ответ: площади равны 4π и 25π соответственно. Один класс задаёт общую формулу и структуру, а экземпляры хранят разные радиусы. Метод не нужно переписывать для каждого размера круга: достаточно вызвать его у нужного объекта.
Условие: создать класс Счёт с начальным балансом и методами пополнения и снятия денег, выполнить операции и проверить результат. Баланс — состояние конкретного счёта, поэтому методы должны менять атрибут текущего экземпляра. Для ясности будем считать, что сумма снятия не превышает баланс.
Ответ: после операций баланс равен 110. Если создать второй счёт, его начальный баланс будет отдельным значением; операции с первым счётом сами по себе его не изменят. Проверить это можно, выведя атрибуты обоих экземпляров после вызовов методов.
Ошибка: считать класс и объект одним и тем же. Класс описывает общий шаблон, а объект является его конкретным экземпляром с собственными данными. Такое смешение возникает, когда название класса принимают за уже созданную сущность. Проверьте себя: если для работы нужны конкретные координаты или баланс, найдите вызов класса, который создаёт экземпляр.
Ошибка: забывать self в параметрах метода. При вызове через объект Python передаёт этот объект автоматически, поэтому методу нужен параметр, который его примет. Без self вызов может закончиться ошибкой о числе аргументов. Проверьте объявление: у метода экземпляра первым параметром обычно стоит self, даже если при вызове его не пишут.
Ошибка: обращаться внутри метода к атрибуту экземпляра без self. Имя радиус само по себе не указывает, у какого объекта нужно взять значение, поэтому Python может принять его за неизвестную переменную. Причина — смешение параметров функции и данных объекта. Проверьте, что чтение и изменение атрибута записаны как self.радиус или self.баланс.
Ошибка: полагать, что изменение атрибута одного экземпляра меняет его у всех объектов. Обычно атрибуты экземпляров содержат отдельные значения, поэтому изменение состояния одного объекта не переносится на другой. Это заблуждение появляется из-за того, что экземпляры созданы по одному классу. Проверьте поведение, создав два объекта и изменив атрибут только у первого, а затем сравнив оба значения.
Для работы с классами полезны переменные, функции, параметры и вызов функций в Python. Атрибуты хранят значения, параметры передают данные при создании объектов, а методы устроены как функции внутри класса. Понимание этих основ помогает проследить, откуда берутся данные и как они изменяются.
Классы и объекты применяют при создании программ, моделирующих реальные сущности: точки, круги, счета и многое другое. Изучение классов служит основой объектно-ориентированного программирования, в котором программу строят из взаимодействующих объектов. Такой подход особенно полезен, когда у сущностей есть собственное состояние и набор действий.
Чем объект отличается от класса?
Класс — это описание общего устройства объектов: их данных и доступных действий. Объект, или экземпляр класса, — конкретная сущность, созданная по этому описанию и имеющая собственные значения атрибутов.
Могут ли объекты одного класса иметь разные значения атрибутов?
Да. Например, у двух объектов класса Круг могут быть радиусы 2 и 5. Значения атрибутов экземпляров хранятся отдельно, поэтому изменение радиуса одного круга обычно не меняет радиус другого.
Зачем нужен метод __init__?
Метод __init__ запускается при создании объекта и обычно задаёт его начальные данные. Через его параметры можно передать экземпляру значения, например координаты точки или радиус круга.
Что означает параметр self?
self обозначает текущий экземпляр — тот объект, для которого вызван метод. С его помощью метод обращается к атрибутам и другим методам именно этого объекта.
Чем метод отличается от обычной функции?
Метод — это функция, определённая внутри класса и связанная с его объектами. При вызове через объект Python автоматически передаёт этот объект первым аргументом, поэтому метод может работать с его состоянием.
§ 47. Объекты и классы