Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
07 Июл 2023
2 мин
1276

Использование функции print() для вывода экземпляров класса

Обычно, когда разработчики начинают работать с объектно-ориентированным программированием в Python, они сталкиваются с ситуацией, когда пытаются вывести

Обычно, когда разработчики начинают работать с объектно-ориентированным программированием в 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__() тоже используют для создания «понятного» строкового представления объекта.

Тест на профориентацию
За 10 минут узнайте, как ваш опыт пригодиться в IT индустрии
Подробнее
Тест на профориентацию

Добавить комментарий