Обычно, когда разработчики начинают работать с объектно-ориентированным программированием в Python, они сталкиваются с ситуацией, когда пытаются вывести экземпляр класса с помощью функции print()
. Вывод при этом может выглядеть не совсем так, как они ожидают. Например:
class MyClass: def __init__(self, value): self.value = value obj = MyClass("Привет, мир!") print(obj)
В результате на экран выводится что-то вроде <__main__.MyClass object at 0x7f315c1e2b70>
, а не "Привет, мир!"
.
Связано это с тем, что по умолчанию функция print()
использует специальные методы класса __str__()
или __repr__()
для формирования строкового представления объекта. Если эти методы не определены в классе, то Python использует дефолтное представление, которое включает в себя имя класса и адрес в памяти, где хранится объект.
Для того чтобы изменить поведение функции print()
для экземпляров класса, нужно определить в классе метод __str__()
. Этот метод должен возвращать строку, которую print()
будет выводить на экран.
Пример:
class MyClass: def __init__(self, value): self.value = value def __str__(self): return self.value obj = MyClass("Привет, мир!") print(obj)
В этом случае на экран будет выведено «Привет, мир!».
Таким образом, метод __str__()
позволяет нам определить более «понятное» строковое представление объекта класса, которое будет использоваться функцией print()
.
Также, стоит отметить, что существует еще один специальный метод __repr__()
, который также влияет на строковое представление объекта. Если __str__()
не определен, Python будет искать метод __repr__()
. Метод __repr__()
используется для создания «официального» строкового представления объекта, которое должно быть более точное и однозначное. В идеале, он должен возвращать строку, которую можно использовать для воссоздания объекта с помощью функции eval()
. Однако в практике часто __repr__()
тоже используют для создания «понятного» строкового представления объекта.
Добавить комментарий