Методы объектов и параметр 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 и создание собственных методов мы будем изучать позже в теме объектно-ориентированного программирования.