Python: Введение в ООП
2026-02-26 16:46 Diff

Имена атрибутов класса могут указывать на функции. Такие функции называются методами. Вы уже сталкивались с методами, когда работали со встроенными структурами данных. Давайте же объявим класс и метод в нем:

Здесь C.add — обычная функция, о чем нам и говорит интерпретатор. Но сами по себе обычные функции, помещенные в класс, не так интересны: те же функции мы можем группировать и в модулях. Более того, обычные функции стоит объявлять именно в модулях.

Методы же нужны для того, чтобы работать с данными объектов класса. Но для этого методы должны быть связаны (bound).

Связанные методы

Вспомните, метод list.append (list — это класс, помним и это) модифицирует именно объект списка. Посмотрим на этот метод поближе:

Мы вызвали метод класса как обычную функцию и передали первым аргументом объект списка. Метод изменил переданный список. Но ведь раньше мы вызывали этот метод в виде l.append(42). Так вот l.append это связанная версия метода list.append: метод связан с конкретным объектом списка и знает, что именно его он должен модифицировать.

Определим класс с атрибутом и методом, затем получим экземпляр класса и посмотрим на вывод REPL для разных версий метода (связанной и не связанной):

Foo.bar — это не связанный метод, то есть обычная функция. А вот x.bar уже связан ("bound") с объектом x: обратите внимание на одну и ту же строку "<__main__.Foo object at 0x7f7beca78668>" — так Python отображает объект x.

Но как метод получает доступ к связанному объекту? В Python методы получают ссылку на связанный объект в качестве первого аргумента. А называть этот аргумент принято именем "self". Вот пример метода, использующего данные объекта:

Именно через аргумент self метод получает доступ к атрибутам связанного объекта и его класса по цепочке.