Начиная с 3-й версии в языке программирования Python все классы неявно имеют один общий суперкласс - object и все классы по умолчанию наследуют его методы.
Одним из наиболее используемых методов класса object является метод __str__(). Когда необходимо получить строковое представление объекта или вывести объект в виде строки, то Python как раз вызывает этот метод. И при определении класса хорошей практикой считается переопределение этого метода.
К примеру, возьмем класс Person и выведем его строковое представление:
class Person: def __init__(self, name, age): self.name = name # устанавливаем имя self.age = age # устанавливаем возраст def display_info(self): print(f"Name: {self.name} Age: {self.age}") tom = Person("Tom", 23) print(tom)
При запуске программа выведет что-то наподобие следующего:
<__main__.Person object at 0x10a63dc00>
Это не очень информативная информация об объекте. Мы, конечно, можем выйти из положения, определив в классе Person дополнительный метод, который выводит данные объекта - в примере выше это метод display_info.
Но есть и другой выход - определим в классе Person метод __str__() (по два подчеркивания с каждой стороны):
class Person: def __init__(self, name, age): self.name = name # устанавливаем имя self.age = age # устанавливаем возраст def display_info(self): print(self) # print(self.__str__()) # или так def __str__(self): return f"Name: {self.name} Age: {self.age}" tom = Person("Tom", 23) print(tom) # Name: Tom Age: 23 tom.display_info() # Name: Tom Age: 23
Метод __str__
должен возвращать строку. И в данном случае мы возвращаем базовую информацию о человеке. Если нам потребуется использовать эту
информацию в других методах класса, то мы можем использовать выражение self.__str__()
И теперь консольный вывод будет другим:
Name: Tom Age: 23 Name: Tom Age: 23