Python: Объекты
До этого момента мы работали только с функциями: они получают данные, что-то делают с ними и возвращают результат. Но в Python есть ещё один похожий механизм — методы.
Метод — это та же функция, только «привязанная» к конкретному значению определённого типа данных. То есть вместе с самим значением мы получаем набор функций, которые умеют с ним работать.
Методы строк
Например, у строк есть свои методы для преобразования текста. Метод upper()
переводит все буквы в верхний регистр:
text = 'hexlet'
print(text.upper()) # => HEXLET
В отличие от функций, у методов сначала пишется значение (строка text
), затем через точку имя метода (upper
), и уже потом скобки.
Встроенных методов у строк довольно много. Ниже некоторые из них:
# Перевод первой буквы в верхний регистр
'hexlet'.capitalize() # => Hexlet
# Перевод всех букв в нижний регистр
print('HeXleT'.lower()) # => hexlet
# Удаление пробелов в начале и конце строки
print(' hi '.strip()) # => hi
Некоторые методы принимают параметры. Например, у метода replace()
первый параметр — это подстрока, которую нужно заменить, а второй — строка-замена.
text = 'abracadabra'
print(text.replace('a', 'o')) # => obrocodobro
print(text.replace('abra', '!')) # => !cad!
Методов в Python действительно много, и их не учат наизусть. Обычно программисты в процессе работы запоминают, какие операции им вообще нужны и как примерно называются такие методы. А когда возникает задача — они либо вспоминают подходящий метод, либо быстро находят его в документации.
Метод и функция — в чём разница
С точки зрения кода, методы и функции ведут себя похоже: они принимают значения и возвращают результат. Разница в том, как они вызываются:
# Вызов функции
len('hexlet')
# Вызов метода
'hexlet'.upper()
Функция вызывается снаружи и получает аргумент в скобках. Метод — это как будто операция, встроенная в само значение. Под капотом значение передается внутрь как нулевой параметр, но это скрыто от нас.
Методы возвращают значения
Методы работают точно так же, как функции: они возвращают результат, а не выводят его на экран. Это значит, что их можно использовать в составе выражений:
print('hexlet'.upper()) # => HEXLET
print('hi'.replace('i', 'ello')) # => hello
Методы строк не изменяют саму строку, а возвращают новую. Это поведение называется иммутабельностью. Мы ещё поговорим об этом позже, но пока важно понимать, что строка остаётся прежней, а результат метода — это новое значение.
Зачем нужны методы в Python
В Python часть возможностей реализована именно как методы. Это позволяет сгруппировать операции рядом с типами данных, к которым они относятся. У строк есть один набор методов, у чисел другой, у списков третий. Таким образом, в языке сосуществуют два способа работы: функции общего назначения и методы, "прикреплённые" к конкретным типам.
Задание
Приведите строку text
к нижнему регистру и напечатайте её на экран. Пример метода, выполняющего эту задачу приведен в теории.
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
from hexlet.test import expect_output
def test(capsys):
expected = "a mind needs books as a sword needs a whetstone."
expect_output(capsys, expected)
Решение учителя откроется через:
20:00
