Python Academy · Урок

Методы экземпляра и self

Пишите методы, работающие с собственными данными объекта.

Урок 3 из 414 шагов

«Методы экземпляра и self» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Введение

Методы экземпляра работают с данными конкретного объекта, используя self для доступа к его атрибутам и их изменения.

Определение методов экземпляра

def method(self): внутри класса — это метод экземпляра. Он получает объект в качестве первого аргумента (self).
class Circle:
    def __init__(self, r): self.r = r
    def area(self):
        import math
        return math.pi * self.r**2
print(Circle(5).area())

Вызов методов

obj.method() — это сокращённая запись ClassName.method(obj). Python автоматически передаёт obj в качестве self.
class Dog:
    def __init__(self, name): self.name = name
    def bark(self): print(f'{self.name} says Woof!')
Dog('Rex').bark()

Методы, возвращающие self

Возврат self позволяет выстраивать цепочки вызовов: builder.set_name('x').set_age(3).build().
class Builder:
    def __init__(self): self.data = {}
    def set(self, k, v):
        self.data[k] = v
        return self
    def build(self): return self.data
result = Builder().set('x',1).set('y',2).build()
print(result)

Закрытые методы (соглашение)

Добавляйте префикс _, чтобы обозначить «внутреннее использование». Префикс __ запускает искажение имени: _ClassName__method.
class Account:
    def __init__(self, bal): self._bal = bal
    def _validate(self, amount): return amount > 0
    def deposit(self, amount):
        if self._validate(amount):
            self._bal += amount
a = Account(100)
a.deposit(50)
print(a._bal)

Свойства как методы

@property превращает метод в доступный для чтения атрибут. При обращении к нему скобки не нужны.
class Circle:
    def __init__(self, r): self.r = r
    @property
    def diameter(self): return self.r * 2
c = Circle(5)
print(c.diameter)  # no ()

Изменение состояния

Методы, изменяющие атрибуты self, меняют состояние объекта. Проектируйте методы с ясным назначением: запрос или команда.
class Stack:
    def __init__(self): self.items = []
    def push(self, x): self.items.append(x)
    def pop(self): return self.items.pop()
    def peek(self): return self.items[-1]
s = Stack()
s.push(1); s.push(2)
print(s.pop(), s.peek())

Сравнение объектов

По умолчанию == сравнивает идентичность объектов. Реализуйте __eq__, чтобы сравнивать объекты по значению.
class Point:
    def __init__(self, x, y): self.x,self.y=x,y
    def __eq__(self, other): return self.x==other.x and self.y==other.y
print(Point(1,2)==Point(1,2))

Протокол итерации

Реализуйте __iter__ и __next__, чтобы сделать класс итерируемым — пригодным для использования в циклах for.
class Countdown:
    def __init__(self, n): self.n = n
    def __iter__(self): return self
    def __next__(self):
        if self.n <= 0: raise StopIteration
        self.n -= 1; return self.n + 1
print(list(Countdown(3)))

Протокол менеджера контекста

Реализуйте __enter__ и __exit__, чтобы класс можно было использовать в инструкциях with.
class Timer:
    def __enter__(self):
        import time
        self.start = time.time()
        return self
    def __exit__(self, *args):
        import time
        print(f'elapsed: {time.time()-self.start:.3f}s')
with Timer(): pass

Метод и функция

При обращении через класс Dog.bark является обычной функцией. Через экземпляр d.bark — связанным методом: self подставляется заранее.
class Dog:
    def bark(self): print('woof')
print(type(Dog.bark))
print(type(Dog().bark))

Быстрая проверка

Что такое цепочка вызовов методов и что должен возвращать метод для её поддержки?

Повторение

Методы экземпляра: def m(self). Вызывайте их как obj.m(). Возвращайте self для построения цепочек вызовов. __eq__/__iter__/__enter__/__exit__ реализуют протоколы. Префикс _ обозначает внутреннее использование.

Продолжить

Отлично! Перейдите к следующему уроку, чтобы углубить свои навыки.
Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
76
Уроки
320

Часто задаваемые вопросы

Урок «Методы экземпляра и self» бесплатный?

Да — полный текст урока «Методы экземпляра и self» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Методы экземпляра и self»?

Пишите методы, работающие с собственными данными объекта. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Методы экземпляра и self»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Классы и метод __init__
  2. Атрибуты экземпляра и класса
  3. Методы экземпляра и self
  4. Магические методы: __str__ и __repr__
← Назад к Python Academy