Определение классов: ключевое слово class, конструктор __init__
Что такое классы и зачем они нужны? 🤔
Представь, что ты строишь дом. Кирпичи, окна, двери — всё это отдельные элементы. Класс в Python — это чертёж, по которому создаются объекты (как дом по проекту).
🔥 Классы помогают:
- Группировать логически связанные данные и функции
- Создавать собственные типы данных
- Упрощать код через повторное использование
- Работать с реальными сущностями (Пользователь, Товар, Заказ)
# Простейший класс без функционала
class Dog:
pass
Создаём первый класс 🐶
Ключевое слово class — начало определения класса. По соглашению PEP 8, имена классов пишутся в CamelCase.
class Car:
def __init__(self, color, model):
self.color = color # Атрибут экземпляра
self.model = model
def drive(self):
print(f"{self.model} поехал!")
💡 self — ссылка на экземпляр класса. Без него методы не смогут работать с данными объекта.
Магия __init__: конструктор класса ✨
__init__ — специальный метод, который автоматически вызывается при создании объекта. Это идеальное место для инициализации атрибутов.
class Robot:
def __init__(self, name, power_level=100):
self.name = name
self.power = power_level
self.is_active = False
def activate(self):
self.is_active = True
print(f"{self.name} активирован!")
# Создаём робота
r2d2 = Robot("R2-D2", 85)
r2d2.activate() # Вывод: R2-D2 активирован!
🧠 Важно: __init__ — это не совсем конструктор в классическом понимании. Настоящий конструктор — метод __new__, но __init__ используется в 99% случаев.
Работа с атрибутами 🛠️
Атрибуты — это переменные, принадлежащие объекту. Их можно: - Добавлять - Изменять - Удалять
class Laptop:
def __init__(self, brand):
self.brand = brand
macbook = Laptop("Apple")
print(macbook.brand) # Apple
# Добавляем новый атрибут динамически
macbook.year = 2020
print(macbook.year) # 2020
# Меняем значение
macbook.brand = "MacBook Pro"
Практический пример: банковский счёт 💰
Давай создадим класс для работы с банковскими счетами:
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance
self.transactions = []
def deposit(self, amount):
self.balance += amount
self.transactions.append(f"Пополнение: +{amount}")
print(f"Счёт пополнен на {amount}. Текущий баланс: {self.balance}")
def withdraw(self, amount):
if amount > self.balance:
print("Недостаточно средств!")
else:
self.balance -= amount
self.transactions.append(f"Снятие: -{amount}")
print(f"Снято {amount}. Остаток: {self.balance}")
def show_transactions(self):
print("\nИстория операций:")
for operation in self.transactions:
print(operation)
# Использование
account = BankAccount("Иван Петров", 1000)
account.deposit(500) # Счёт пополнен на 500. Текущий баланс: 1500
account.withdraw(200) # Снято 200. Остаток: 1300
account.show_transactions()
Продвинутые фишки 🚀
1. Типизация в Python 3.6+
Можно явно указывать типы атрибутов:
class User:
def __init__(self, name: str, age: int, is_admin: bool = False):
self.name = name
self.age = age
self.is_admin = is_admin
2. Вычисляемые свойства (@property)
Превращаем метод в атрибут:
class Circle:
def __init__(self, radius):
self.radius = radius
@property
def area(self):
return 3.14 * self.radius ** 2
circle = Circle(5)
print(circle.area) # 78.5 (вызывается без скобок!)
Главное запомнить 🔥
- Классы — это шаблоны для создания объектов
__init__— метод инициализации (не совсем конструктор)self— ссылка на экземпляр класса- Атрибуты можно добавлять/менять динамически
- Классы помогают структурировать сложные программы
Хочешь глубже разобрать тему? Рекомендую видео Данилы Бежина про ООП: https://www.youtube.com/@DanilaBezhin. Там есть отличные примеры!
Попробуй создать класс для своего проекта — например, для игрового персонажа или интернет-магазина. Практика — лучший учитель! 💪