Add lesson 4
This commit is contained in:
parent
d69ac5ee42
commit
512a9e6ceb
1 changed files with 76 additions and 0 deletions
76
src/Lesson_4/lesson.py
Normal file
76
src/Lesson_4/lesson.py
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
from abc import ABC, abstractmethod
|
||||
|
||||
|
||||
class Printable(ABC):
|
||||
@abstractmethod
|
||||
def print_info(self) -> None:
|
||||
pass
|
||||
|
||||
|
||||
class Book(Printable):
|
||||
def __init__(
|
||||
self,
|
||||
title: str,
|
||||
year: int,
|
||||
author: str,
|
||||
) -> None:
|
||||
self.title = title
|
||||
self.year = year
|
||||
self.author = author
|
||||
|
||||
def print_info(self) -> None:
|
||||
print(self)
|
||||
|
||||
def info(self) -> str:
|
||||
return 'Книга "{}", автора: {}, {} года.'.format(
|
||||
self.title,
|
||||
self.author,
|
||||
self.year,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def from_string(cls, string: str):
|
||||
title, year, author = string.split(";")
|
||||
return cls(title, int(year), author)
|
||||
|
||||
@property
|
||||
def age(self) -> int:
|
||||
return self.year
|
||||
|
||||
@age.setter
|
||||
def age(self, value: int):
|
||||
self.year = value
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.info()
|
||||
|
||||
def __eq__(self, other) -> bool:
|
||||
return isinstance(other, Book) and self.author == other.author
|
||||
|
||||
|
||||
class EBook(Book):
|
||||
def __init__(
|
||||
self, title: str, year: int, author: str, format_: str
|
||||
) -> str:
|
||||
super().__init__(title, year, author)
|
||||
self.format = format_
|
||||
|
||||
def info(self) -> str:
|
||||
return 'Электронная книга "{}", автора: {}, {} года.'.format(
|
||||
self.title,
|
||||
self.author,
|
||||
self.year,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def from_string(cls, string: str):
|
||||
title, year, author, format_ = string.split(";")
|
||||
return cls(title, int(year), author, format_)
|
||||
|
||||
|
||||
book = Book.from_string("Новый Заголовок;2021;Новый автор")
|
||||
print(book)
|
||||
book.print_info()
|
||||
|
||||
ebook = EBook.from_string("Новый Заголовок;2021;Новый автор;epub")
|
||||
print(ebook)
|
||||
Loading…
Add table
Add a link
Reference in a new issue