Класс, __init__, атрибуты экземпляра и методы
Содержание курса
Атрибуты экземпляра и методы экземпляра
Когда __init__ запущен, у нас есть self — свежий пустой объект. Чтобы объект стал полезным, нужно записать в него данные. Делается это простым присваиванием через точку:
class Counter:
def __init__(self, name):
self.name = name
self.value = 0
self.name и self.value — это атрибуты экземпляра. После того как __init__ отработал, они живут внутри объекта и доступны везде, где есть ссылка на этот объект. Прочитать их можно точно так же: объект.атрибут.
Важный момент: self.name и просто name — разные вещи. name — это локальный параметр __init__, он исчезнет, когда метод завершится. self.name — это данные, привязанные к объекту, они останутся.
c = Counter('A')
print(c.name) # 'A'
print(c.value) # 0
Теперь про методы. Метод экземпляра — это обычная функция внутри класса, первым параметром которой всегда идёт self. Через self метод получает доступ к атрибутам именно того объекта, на котором он вызван:
class Counter:
def __init__(self, name):
self.name = name
self.value = 0
def increment(self, step=1):
self.value += step
def reset(self):
self.value = 0
def status(self):
return f"{self.name}: {self.value}"
Когда пишем c.increment(3), Python внутри делает вот что: берёт объект c, передаёт его как self в метод increment, передаёт 3 как step. Метод читает self.value, прибавляет 3 и записывает результат обратно — всё это происходит с атрибутом именно объекта c.
c = Counter('A')
c.increment(3)
print(c.status()) # A: 3
c.reset()
print(c.status()) # A: 0
Методы могут не только изменять атрибуты, но и читать их и возвращать результат — как status() выше. Ключевой принцип один: всё взаимодействие с данными объекта идёт через self. Нет self — нет доступа к состоянию конкретного экземпляра.
