#python-3.x #string #integer #typeerror
#python-3.x #строка #целое число #ошибка типа
Вопрос:
class book():
def __init__(self,name,author,page,type):
self.name = name
self.author = author
self.page = page
self.type = type
print("Book information")
def __len__(self):
return self.page
xxx = book("Of mice and men","John Steinbeck",293,"Roman")
print(len(xxx))
этот код верен.но если я пишу return "Page : {} ".format(self.page)
вместо return self.page
, я встречаю ошибку.Почему?
Error = TypeError: объект ‘str’ не может быть интерпретирован как целое число введите описание изображения здесь
Комментарии:
1. В документах указано
__len__
, что метод должен возвращать целое число. docs.python.org/3/reference/datamodel.html#object.__len __2. Кроме того,
type
это плохое название для переменной, поскольку она уже встроенаtype
.
Ответ №1:
Опубликованный вами код работает просто отлично, но код на изображении возвращает строку, а не int, как указал @Axe319.
Если вы хотите, чтобы функция печатала этот текст, вы могли бы просто добавить оператор print в __len__()
метод, т. е.
class book():
def __init__(self,name,author,page,type):
self.name = name
self.author = author
self.page = page
self.type = type
print("Book information")
def __len__(self):
print(f"Page {self.page}")
return self.page
xxx = book("Of mice and men","John Steinbeck",293,"Roman")
print(len(xxx))
Хотя это не очень хорошо. Вы также можете добавить свойство ( book_length_str
), которое вернет нужную вам строку, т.Е.
class book():
def __init__(self,name,author,page,type):
self.name = name
self.author = author
self.page = page
self.type = type
print("Book information")
def __len__(self):
print(f"Page {self.page}")
return self.page
@property
def book_length_str(self):
return f"Page {self.page}"
xxx = book("Of mice and men","John Steinbeck",293,"Roman")
print(xxx.book_length_str)