Начиная с 3-й версии Python все классы неявно имеют один общий суперкласс — object и все классы по умолчанию наследуют его методы.
Одним из наиболее используемых методов класса object является метод __str__(). Когда необходимо получить строковое представление объекта или вывести объект в виде строки, то Python как раз вызывает этот метод. И при определении класса хорошей практикой считается переопределение этого метода.
К примеру, возьмем класс Person и выведем его строковое представление:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class Person:def __init__(self, name, age):self.__name = name # устанавливаем имяself.__age = age # устанавливаем возраст @propertydef name(self):return self.__name@propertydef age(self):return self.__age@age.setterdef age(self, age):if age in range(1, 100):self.__age = ageelse:print("Недопустимый возраст") def display_info(self):print("Имя:", self.__name, "\tВозраст:", self.__age) tom = Person("Tom", 23)print(tom) |
При запуске программа выведет что-то наподобие следующего:
<__main__.Person object at 0x0000017D2BEBDCF8>
Это не очень информативная информация об объекте. Теперь определим в классе Person метод __str__:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Person:def __init__(self, name, age):self.__name = name # устанавливаем имяself.__age = age # устанавливаем возраст@propertydef name(self):return self.__name@propertydef age(self):return self.__age@age.setterdef age(self, age):if age in range(1, 100):self.__age = ageelse: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