Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
Часто при работе с объектами в Python возникает потребность в представлении объектов в виде строк. Это может быть полезно для отладки, логирования или просто для вывода информации о объекте. В Python для этого существуют два специальных метода: __str__
и __repr__
.
Предположим, что есть класс Cat
, который имеет атрибуты name
и age
. Можно было бы представить объект этого класса в виде строки следующим образом:
class Cat: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f'Cat(name={self.name}, age={self.age})'
Тогда при попытке преобразовать объект класса Cat
в строку, будет получено представление объекта в виде Cat(name=Fluffy, age=5)
.
Однако, что если нужно получить более детальное или иное представление объекта, которое будет удобно использовать для отладки или логирования? Здесь на помощь приходит метод __repr__
.
Метод __repr__
предназначен для создания «официального» строкового представления объекта, которое может быть использовано для воссоздания объекта при помощи функции eval()
. Вернувшись к нашему примеру с классом Cat
, можно добавить метод __repr__
следующим образом:
class Cat: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f'Cat(name={self.name}, age={self.age})' def __repr__(self): return f'Cat(name={self.name!r}, age={self.age!r})'
Теперь при вызове repr()
для объекта класса Cat
, будет получено представление объекта в виде Cat(name='Fluffy', age=5)
, которое может быть использовано для воссоздания объекта.
Важно отметить, что если для класса определен только метод __repr__
, то он будет использован и при вызове str()
. Однако, если определены оба метода, __str__
и __repr__
, то при вызове str()
будет использован __str__
, а при вызове repr()
— __repr__
.
Итак, главное отличие между __str__
и __repr__
в Python заключается в их назначении: __str__
предназначен для создания «приятного» для чтения представления объекта, в то время как __repr__
предназначен для создания «официального» представления, которое может быть использовано для воссоздания объекта.
Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.
Добавить комментарий