Урок 66 — Примеры: Основы ООП

📁 Блок: Python Fundamentals / ООП ⏱️ Время изучения: ~30 мин 🎯 Сложность: Средняя
#class #pass #def #print #return

⚡ Кратко

Примеры класса Book: пустой класс, инициализация полей, доступ к полям, методы и изменение состояния.

💻 Пример 1. Пустой класс

class EmptyClass:
    pass

obj = EmptyClass()
print(obj)  # <__main__.EmptyClass object at 0x...>

Простейший класс без состояния. Используется pass как заглушка.

💻 Пример 2. Класс Book с __init__

class Book:
    def __init__(self, title: str, author: str) -> None:
        self.title = title
        self.author = author


book1 = Book("1984", "George Orwell")
book2 = Book("Brave New World", "Aldous Huxley")

print(book1.title, book1.author)
print(book2.title, book2.author)

Каждый объект получает свои значения полей. Поля title и author принадлежат конкретному экземпляру.

💻 Пример 3. Доступ к полям и их изменение

class Book:
    def __init__(self, title: str, author: str) -> None:
        self.title = title
        self.author = author


book = Book("1984", "George Orwell")
print(book.title)  # 1984
print(book.author)  # George Orwell

book.title = "Animal Farm"
print(book.title)  # Animal Farm

Поля можно читать и перезаписывать. Изменение затрагивает только текущий объект.

💻 Пример 4. Методы класса

class Book:
    def __init__(self, title: str, author: str) -> None:
        self.title = title
        self.author = author

    def get_description(self) -> str:
        return f"{self.title} — {self.author}"

    def show_info(self) -> None:
        print(self.get_description())

    def make_author_upper(self) -> None:
        self.author = self.author.upper()


book = Book("1984", "George Orwell")
book.show_info()            # 1984 — George Orwell
book.make_author_upper()    # меняем поле author
book.show_info()            # 1984 — GEORGE ORWELL

Метод get_description возвращает строку, show_info выводит её, а make_author_upper изменяет состояние объекта.

💻 Пример 5. Счётчик входов (User)

class User:
    def __init__(self, username: str, email: str) -> None:
        self.username = username
        self.email = email
        self.login_count = 0

    def show_info(self) -> None:
        print("-" * 30)
        print("Пользователь:", self.username)
        print("Почта:", self.email)
        print("-" * 30)

    def login(self) -> None:
        self.login_count += 1
        print(f"{self.username} вошёл в систему")

    def get_logins(self) -> int:
        return self.login_count


user = User("alice", "alice@example.com")
user.show_info()
user.login()
user.login()
print("Количество входов:", user.get_logins())

Поле login_count не передаётся извне, а инициализируется нулём в __init__. Методы изменяют и возвращают состояние.

💻 Пример 6. Скидка на товар (Product)

class Product:
    def __init__(self, name: str, price: float) -> None:
        self.name = name
        self.price = price

    def apply_discount(self, percent: float) -> None:
        print(f"Применяем скидку {percent}%")
        self.price -= self.price * percent / 100

    def info(self) -> None:
        print(f"Название: {self.name}")
        print(f"Цена: {self.price}")


p = Product("Молоко", 120)
p.info()
p.apply_discount(25)
p.info()

Метод apply_discount изменяет внутреннее состояние (цену), а не возвращает новое значение.

Проверить по документации: аннотации типов и стрелочные подсказки возвращаемых значений выходят за рамки исходного материала урока.