Я не даю его как строку, но python обрабатывает его как строку

#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)