Короткий ответ
Метод экземпляра — это функция, определённая внутри класса, которая автоматически получает первым аргументом сам объект, на котором её вызвали (self), что даёт методу доступ к атрибутам и другим методам этого конкретного экземпляра.
Как это работает подробнее
Когда вы пишете obj.method(arg), Python фактически вызывает ClassName.method(obj, arg) — self связывается с объектом автоматически через механизм дескрипторов функций (bound method). Внутри метода self.attr обращается к атрибуту именно этого экземпляра.
Пример кода
example.py
class Counter:
def __init__(self, start=0):
self.value = start # self — ссылка на конкретный экземпляр
def increment(self, step=1):
self.value += step # изменяет состояние именно этого объекта
return self.value
c1 = Counter()
c2 = Counter(start=100)
c1.increment()
c2.increment(step=5)
print(c1.value, c2.value) # 1 105 — у каждого объекта своё состояниеЧто использовать на практике
- Практика.
self— это просто соглашение об имени (можно назвать иначе, но так не делают), и он обязателен как первый параметр любого обычного метода, не являющегосяstaticmethod. Черезselfметоды читают и изменяют состояние объекта, вызывают другие методы того же объекта (self.other_method()).
Подводные камни
- Риски. Забывают указать
selfв сигнатуре метода и получаютTypeError: method() takes 0 positional arguments but 1 was givenпри вызове. Также пытаются вызвать метод экземпляра через имя класса без передачи объекта:ClassName.method()без аргумента вместоobj.method().