Урок 66 — Примеры: Основы ООП
⚡ Кратко
Примеры класса 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 изменяет внутреннее состояние (цену), а не возвращает новое значение.
Проверить по документации: аннотации типов и стрелочные подсказки возвращаемых значений выходят за рамки исходного материала урока.