/
i_918
/
python_wednesday
Обзор
Документация
Войти
/
i_918
/
python_wednesday
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
29.10/classes.py
72 строки
2 KB
i_918
практика по классам
29 окт 2025, 09:40
29 окт 2025, 09:40
f3804b6
Код
Авторство
О чём код?
from abc import ABC, abstractmethod from datetime import datetime class Printable(ABC): @abstractmethod def print_info(self): pass class Book(Printable): def __init__(self, title, author, year): self.title = title self.author = author self.year = year def info(self): return f'Title: {self.title}, author: {self.author}, year: {self.year}' def print_info(self): return self.info() def __str__(self): return self.info() def __eq__(self, other): if not isinstance(other, Book): return False return (self.title == other.title and self.author == other.author and self.year == other.year) @property def age(self): return datetime.now().year - self.year @classmethod def from_string(cls, book_str): parts = book_str.split(', ') if len(parts) != 3: raise ValueError("Строка должна быть в формате: 'название, автор, год'") title, author, year_str = parts try: year = int(year_str) except ValueError: raise ValueError("Год должен быть целым числом") return cls(title, author, year) class Ebook(Book): def __init__(self, title, author, year, format): super().__init__(title, author, year) self.format = format def info(self): return f'{self.title}, {self.year}, {self.author}, format: {self.format}' def print_info(self): return self.info() if __name__ == "__main__": book = Book("1984", "Джордж Оруэлл", 1949) ebook = Ebook("1984", "Джордж Оруэлл", 1949, "PDF") print(book) print(f"Возраст книги: {book.age} лет") print(book.print_info()) print() print(ebook) print(ebook.print_info())