Методы объектов и параметр self в Python
Обновлено:
1. Что такое метод
Мы уже знаем обычные функции:
print()
len()
sorted()
Также у объектов могут быть методы.
Метод — это функция, связанная с определённым классом и предназначенная для работы с объектами этого класса.
Например, создадим строку:
message = 'HELLO PYTHON'
У объектов класса str есть метод:
lower()
Вызовем его:
result = message.lower()
print(result)
Результат:
hello python
Синтаксис обращения к методу:
object.method()
То есть сначала указываем объект:
message
затем через точку обращаемся к его методу:
.lower()
2. Метод работает с объектом слева от точки
При обычном вызове функции мы привыкли передавать объект в круглые скобки:
len(message)
При вызове метода синтаксис выглядит иначе:
message.lower()
Объект:
message
уже указан слева от точки.
Поэтому его не нужно ещё раз передавать в круглые скобки.
Концептуально можно представить:
message
↓
lower()
Метод получает объект, для которого был вызван, и может работать с ним.
self
3. Как это выглядит в собственном классе
Пока мы не изучаем объектно-ориентированное программирование и не разбираем подробно создание классов.
Посмотрим только на небольшой пример:
class NumberHelper:
def double(self):
return self.number * 2
def triple(self):
return self.number * 3
Создадим объект этого класса:
helper = NumberHelper()
helper.number = 10
Теперь можно обращаться к его методам:
print(helper.double())
print(helper.triple())
Результат:
20
30
Вызов:
helper.double()
связан с объектом:
helper
В определении метода этот объект принимает параметр:
self
То есть в данном вызове self будет ссылаться на объект helper.
4. Объект передаётся методу автоматически
Обратим внимание на определение:
def double(self):
return self.number * 2
У метода есть параметр:
self
Но вызываем мы его так:
helper.double()
а не так:
helper.double(helper)
При обычном вызове метода через экземпляр Python автоматически связывает объект слева от точки с первым параметром метода.
По соглашению этот параметр называется:
self
Поэтому конструкцию:
helper.double()
на данном этапе можно воспринимать так:
Вызвать метод
double()для объектаhelper.
Методы принадлежат классу
5. Экземпляры одного класса используют одни и те же методы
Создадим два объекта:
first_helper = NumberHelper()
second_helper = NumberHelper()
first_helper.number = 10
second_helper.number = 50
Оба объекта являются экземплярами одного класса:
NumberHelper
Поэтому для обоих доступны его методы:
print(first_helper.double())
print(second_helper.double())
Результат:
20
100
Метод double() определён в классе один раз, но может использоваться разными экземплярами этого класса.
При каждом вызове он работает именно с тем объектом, через который был вызван:
first_helper.double()
second_helper.double()
Методы встроенных классов
Тот же принцип мы будем постоянно встречать у встроенных типов Python.
Для строки:
message = 'HELLO'
message.lower()
Для списка позже будем использовать методы в таком виде:
numbers.some_method()
То есть общий синтаксис остаётся одинаковым:
object.method()
У разных классов существуют разные методы, потому что разные объекты предназначены для решения разных задач.
Главное по теме
Метод — это функция, связанная с классом и предназначенная для работы с объектами этого класса.
Метод вызывается через точку:
object.method()
Например:
message.lower()
Объект слева от точки автоматически становится объектом, с которым работает метод.
В собственных обычных методах этот объект принимается первым параметром, который по соглашению называется:
self
Например:
class NumberHelper:
def double(self):
return self.number * 2
Вызов:
helper.double()
означает, что метод double() работает с объектом:
helper
Методы определяются в классе и становятся доступны его экземплярам.
Подробно классы, экземпляры, self и создание собственных методов мы будем изучать позже в теме объектно-ориентированного программирования.