Объектно-ориентированное программирование
Классы, объекты, методы, __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))Совет: не всё нужно превращать в класс. Для простого вычисления достаточно функции; класс оправдан, когда состояние и поведение связаны.