"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.
В Python объект — это значение определённого типа, с которым программа может работать: хранить его в переменной, получать его атрибуты и вызывать методы. Тип подсказывает, какие действия доступны, например можно ли изменить объект. Строки после создания остаются неизменными, а списки можно менять. Понимание объектов помогает правильно использовать методы и не путать присваивание переменной с созданием копии.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Объект — сущность в программе, которая хранит данные и имеет тип. Объектами являются не только списки и строки, но и значения вроде числа 5 или результата вычисления 2 + 3. Это понятие помогает описывать любые данные, с которыми работает программа.
Атрибут — данные или характеристика, связанные с объектом. К атрибуту обращаются через точку после имени объекта, например объект.атрибут. Такая запись позволяет получать связанные с объектом сведения или обращаться к возможностям, которые он предоставляет.
Метод — действие, которое можно вызвать у объекта. Имя метода записывают после точки, а круглые скобки показывают, что действие нужно выполнить: объект.метод(). Методы нужны, чтобы выполнять операции, подходящие для конкретного типа объекта.
Изменяемый объект — объект, состояние которого можно менять после создания, не заменяя его новым объектом. Список можно дополнить или отсортировать, а строка, напротив, неизменяема: её символы нельзя заменить на месте. Это различие важно учитывать, выбирая действия и проверяя, меняется ли исходное значение.
Объекты появляются во время выполнения программы, когда Python обрабатывает значения. Литерал вроде строки 'дом' или списка [1, 2] уже задаёт объект, а выражение вроде 4 + 5 создаёт значение-результат. Поэтому переменная обычно не является самим объектом: она даёт программе имя, через которое можно обратиться к значению.
У каждого объекта есть тип, который определяет, какие данные и действия с ним доступны. Например, сложение чисел вычисляет сумму, а сложение строк соединяет текст; одинаковый символ операции работает по-разному из-за типов. Узнать тип помогает функция type(): вызов type(x) возвращает информацию о типе объекта x.
Атрибуты и методы записывают через точку, потому что они принадлежат конкретному объекту или связаны с ним. Например, у строки s можно запросить метод s.upper. Но такая запись сама по себе не выполняет действие: она обозначает метод. Чтобы получить результат работы, нужны скобки — s.upper().
Метод может вернуть новое значение, оставив исходный объект прежним, или изменить сам объект. Строковый метод upper() создаёт строку в верхнем регистре, а исходная строка остаётся неизменной. Список, напротив, можно изменить методом append() или sort(); эти методы обычно возвращают None, потому что результатом действия становится изменение самого списка.
Присваивание переменной объекта не всегда означает создание его копии. После команды b = a обе переменные могут указывать на один изменяемый список, поэтому изменение через b будет заметно и через a. Такое поведение удобно, когда нужен общий объект, но может неожиданно менять данные; если нужна независимая версия списка, следует создать копию.
| Объект и тип | Пример атрибута или метода | Как получить результат | Изменяется ли исходный объект |
|---|---|---|---|
| Строка (str) | upper(), lower(), обращение по индексу | s.upper() возвращает строку в верхнем регистре; s[0] даёт первый символ | Нет: строка неизменяема |
| Список (list) | append(), sort(), обращение по индексу | a.append(4) добавляет элемент; a.sort() упорядочивает список | Да: append() и sort() меняют список |
| Число (int или float) | Арифметические операции; например, bit_length() у int | Результат операции можно сохранить в переменную; для int вызвать n.bit_length() | Нет: числовые значения неизменяемы |
| Изменяемые и неизменяемые объекты | Методы списка и строки | Сравнить значение до и после вызова метода | Список можно менять, строку — нет; метод может вернуть новое значение |
Сначала найдите тип объекта, затем проверьте, что делает выбранный метод: возвращает результат или меняет объект. Для строки результат upper() нужно сохранить, если он понадобится дальше. Для списка после append() или sort() обращайтесь к самому списку: метод меняет его на месте.
Условие. Даны s = 'Информатика' и a = [3, 1, 2]. Нужно определить тип каждого значения, получить строку в верхнем регистре и найти длину списка. Сначала различим функции и методы: type() и len() вызываются как функции, а upper() — как метод строки.
Ответ. Типы — str и list, строка в верхнем регистре — 'ИНФОРМАТИКА', длина списка — 3. Если присвоить результат s.upper() переменной, в ней будет новая строка, а исходный s останется прежним.
Условие. Дан список a = [5, 2, 4]. Добавим число 3, упорядочим элементы и выведем изменённый список. Здесь нужно выбрать методы, которые меняют список на месте, и не ждать от них нового списка в качестве результата.
Ответ. После добавления числа и сортировки список имеет вид [2, 3, 4, 5]. Оба метода изменили исходный объект, поэтому отдельное присваивание результата не требуется.
Условие. Есть список a = [1, 2], затем выполняется b = a и список меняется через b. Нужно понять, что окажется в a, и сравнить это с созданием копии. Проследим не только за именами переменных, но и за тем, с каким объектом они связаны.
Ответ. После изменения через b переменная a также показывает [1, 2, 3]. Копия c — отдельный список, поэтому изменение c не меняет a.
Считать, что b = a автоматически копирует список. Так думают, потому что у переменных разные имена, но обе могут ссылаться на один объект. Проверьте себя: добавьте элемент через b и выведите a; если элемент появился, копирования не было.
Записывать s.upper без скобок и ожидать готовую строку. Такая запись указывает на метод, но не вызывает его; ошибку легко допустить, приняв имя действия за результат. Проверьте себя: вызовите s.upper() и сравните результат со значением s.upper.
Сохранять результат append() или sort() обратно в переменную списка. Эти методы меняют список на месте и обычно возвращают None, поэтому присваивание может заменить список на None. Проверьте себя: выполните a.append(4), а затем выведите a.
Пытаться изменить отдельный символ строки так же, как элемент списка. Строка неизменяема, хотя обращение по индексу позволяет прочитать её символ. Проверьте себя: чтение s[0] допустимо, но присваивание нового символа по этому индексу вызовет ошибку.
Для работы с объектами нужны знания о переменных, типах данных, строках и списках, а также о вызове функций и записи выражений в Python. Понимание объектов пригодится при обработке коллекций, использовании библиотек и создании собственных классов: с объектами можно работать через их данные и методы. Представление о ссылках и изменяемости особенно важно, когда списки передают в функции или ищут причину неожиданного изменения данных.
В Python данные представлены объектами определённого типа.
Тип объекта определяет доступные для него операции и методы.
К атрибуту или методу обращаются через точку.
Метод вызывают с помощью круглых скобок.
Одни методы возвращают результат, другие изменяют объект.
Присваивание изменяемого объекта может передать ссылку, а не создать копию.
Строки неизменяемы, списки изменяемы.
Что в Python называется объектом?
Объект — это значение в программе, у которого есть тип и собственные данные. Например, строка 'привет', число 7 и список [1, 2] — объекты.
Чем атрибут отличается от метода?
Атрибут — это данные или характеристика, связанные с объектом; к нему обращаются через точку. Метод — действие объекта, его вызывают через точку и круглые скобки, например s.upper().
Как узнать тип объекта?
Передайте объект функции type(), например type([1, 2]). Она покажет тип list. Тип помогает выяснить, какие операции и методы доступны.
Почему после вызова append() не нужно присваивать результат обратно списку?
Метод append() изменяет исходный список: добавляет элемент в конец. Он обычно возвращает None, а не новый список, поэтому присваивание результата затрёт переменную значением None.
Почему изменение списка через одну переменную может изменить его и через другую?
После присваивания b = a обе переменные могут ссылаться на один и тот же список. Поэтому изменение списка через b видно и при обращении через a. Чтобы получить отдельный список, создают копию, например b = a.copy().
§ 67. Работа с объектами