Всем добрый день!
Подскажите, пожалуйста, почему у меня зацикливаются строчки с @pages.setter до self.pages = pages (24 - 29)? Вот никак не пойму((
Подскажите, пожалуйста, почему у меня зацикливаются строчки с @pages.setter до self.pages = pages (24 - 29)? Вот никак не пойму((
Python:
class Book:
""" Базовый класс книги. """
def __init__(self, name: str, author: str):
self._name = name
self._author = author
def __str__(self):
return f"Книга {self._name}. Автор {self._author}"
def __repr__(self):
return f"{self.__class__.__name__}(name={self._name!r}, author={self._author!r})"
class PaperBook(Book):
def __init__(self, name: str, author: str):
super().__init__(name, author)
@property
def pages(self):
return self.pages
@pages.setter
def pages(self, pages: int):
if not isinstance(pages, int):
raise TypeError("Количество страниц должно быть типа int")
if pages <= 0:
raise ValueError("Количество страниц должно быть положительным числом")
self.pages = pages
def __str__(self):
return f"Книга {self._name}. Автор {self._author}. Объем {self.pages} страниц."
def __repr__(self):
return f"{self.__class__.__name__}(name={self._name!r}, author={self._author!r}, pages={self.pages})"
class AudioBook(Book):
def __init__(self, name: str, author: str):
super().__init__(name, author)
@property
def duration(self):
return self.duration
@duration.setter
def duration(self, duration: float):
if not isinstance(duration, float):
raise TypeError("Продолжительность должна быть типа Float")
if duration <= 0:
raise ValueError("Продолжительность должна быть положительным числом")
self.duration = duration
def __str__(self):
return f"Книга {self._name}. Автор {self._author}. Продолжительность {self.duration} часов."
def __repr__(self):
return f"{self.__class__.__name__}(name={self._name!r}, author={self._author!r}, duration={self.duration})"
book1 = PaperBook('A Byte of Python', 'Swaroop Chitlur')
book1.pages = 164
book2 = AudioBook('Начала Python', 'Петр Питонов')
book2.duration = 999.9
print(book1.__str__())
print(book1.__repr__())
print()
print(book2.__str__())
print(book2.__repr__())