Начиная с 3-й версии Python все классы неявно имеют один общий суперкласс — object и все классы по умолчанию наследуют его методы.
Одним из наиболее используемых методов класса object является метод __str__(). Когда необходимо получить строковое представление объекта или вывести объект в виде строки, то Python как раз вызывает этот метод. И при определении класса хорошей практикой считается переопределение этого метода.
К примеру, возьмем класс Person и выведем его строковое представление:
class Person: def __init__(self, name, age): self.__name = name # устанавливаем имя self.__age = age # устанавливаем возраст @property def name(self): return self.__name @property def age(self): return self.__age @age.setter def age(self, age): if age in range(1, 100): self.__age = age else: print("Недопустимый возраст") def display_info(self): print("Имя:", self.__name, "\tВозраст:", self.__age) tom = Person("Tom", 23) print(tom)
При запуске программа выведет что-то наподобие следующего:
<__main__.Person object at 0x0000017D2BEBDCF8>
Это не очень информативная информация об объекте. Теперь определим в классе Person метод __str__:
class Person: def __init__(self, name, age): self.__name = name # устанавливаем имя self.__age = age # устанавливаем возраст @property def name(self): return self.__name @property def age(self): return self.__age @age.setter def age(self, age): if age in range(1, 100): self.__age = age else: print("Недопустимый возраст") def display_info(self): print(self.__str__()) def __str__(self): return "Имя: {} \t Возраст: {}".format(self.__name, self.__age) tom = Person("Tom", 23) print(tom)
Метод __str__()
должен возвращать строку. И в данном случае мы возвращаем базовую информацию о человеке. И теперь консольный вывод будет другим:
Имя: Tom Возраст: 23