Программирование

Объектно-ориентированное программирование

Классы, объекты, методы, __init__ и наследование.

Все уроки · Уроки Python: учимся с нуля

Класс и объект

Класс — это чертёж, а объект — конкретный экземпляр, созданный по нему. Например, из класса Account получается отдельный объект для каждого клиента. Метод __init__ срабатывает при создании объекта, а self — это сам объект.

class Account:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount

    def show(self):
        print(f"{self.owner}: {self.balance} AZN")

a = Account("Rena", 50)
a.deposit(25)
a.show()   # Rena: 75 AZN
  • Атрибуты хранят состояние объекта.
  • Методы — это то, что объект умеет делать.

Наследование

Наследование позволяет новому классу взять возможности существующего. Подкласс получает методы родителя, может их переопределить или вызвать родителя через super().

class Account:
    def __init__(self, owner, balance=0):
        self.owner, self.balance = owner, balance

class SavingsAccount(Account):
    def __init__(self, owner, balance=0, rate=0.05):
        super().__init__(owner, balance)
        self.rate = rate

    def add_interest(self):
        self.balance *= 1 + self.rate

s = SavingsAccount("Tural", 200)
s.add_interest()
print(s.balance)   # 210.0

Специальные методы и предупреждение

__str__ определяет, как объект выглядит при печати, а __len__ позволяет использовать len(). Двойные подчёркивания обозначают особые механизмы языка.

class Playlist:
    def __init__(self, songs):
        self.songs = songs
    def __len__(self):
        return len(self.songs)
    def __str__(self):
        return "Playlist: " + ", ".join(self.songs)

p = Playlist(["A", "B"])
print(p, len(p))

Совет: не всё нужно превращать в класс. Для простого вычисления достаточно функции; класс оправдан, когда состояние и поведение связаны.

Автор: Nibras Code