Начиная с 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

