Метод __str__() очень полезен, когда вам нужно определить строковое представление объекта класса. Обычно он возвращает простое текстовое представление объекта, которое может быть полезно для отладки или отображения объекта пользователю. Например, если у вас есть класс «Студент», метод __str__() может возвращать строку вида «Студент: Имя Фамилия».
Метод __repr__() похож на метод __str__(), но предназначен для представления объекта, которое должно быть понятным и полным. Он возвращает строку, которая может быть использована для восстановления объекта. Метод __repr__() обычно используется для отладки и разработки, и его результатом может быть что-то вроде «Студент(Имя=’Имя’, Фамилия=’Фамилия’)».
В следующем примере показано, как определить метод __str__
в классе Person
:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Имя: {self.name}, Возраст: {self.age}"
person = Person("Иван", 25)
print(person)
В результате выполнения этого кода будет выведено:
Имя: Иван, Возраст: 25
Иногда бывает полезно также определить метод __repr__
в классе, который возвращает строковое представление объекта, которое может быть использовано для его полной идентификации. Этот метод вызывается функцией repr
.
Метод __str__
является одним из основных методов для поддержки «соглашения о строковом представлении объектов» в Python, и его использование может значительно улучшить читаемость и отладку вашего кода.
Метод __repr__
возвращает строку, которая должна быть валидным Python-кодом, представляющим объект. Она часто используется для воссоздания объекта при его десериализации или для отладки программы.
Пример использования метода __repr__
:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name={self.name}, age={self.age})"
person = Person("Alice", 25)
Примеры использования методов __str__ и __repr__ для разных классов
Ниже приведены примеры использования этих методов для различных классов:
Класс Point:
class Point: def __init__(self, x, y): self.x = x self.y = y def __str__(self): return f"Point({self.x}, {self.y})" def __repr__(self): return f"Point({self.x}, {self.y})"
При вызове метода __str__ будет возвращаться строка вида «Point(x, y)», где x и y — значения координат точки. Метод __repr__ будет возвращать строку с тем же форматом.
Класс Employee:
class Employee: def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return f"Employee: {self.name}" def __repr__(self): return f"Employee: {self.name}, Salary: {self.salary}"
Метод __str__ будет возвращать строку вида «Employee: name», где name — имя сотрудника. Метод __repr__ будет возвращать строку с форматом «Employee: name, Salary: salary», где name — имя сотрудника, salary — его зарплата.
Класс Car:
class Car: def __init__(self, make, model, year): self.make = make self.model = model self.year = year def __str__(self): return f"{self.make} {self.model} ({self.year})" def __repr__(self): return f"Car: {self.make} {self.model} ({self.year})"
Метод __str__ будет возвращать строку вида «make model (year)», где make — марка автомобиля, model — модель, year — год выпуска. Метод __repr__ будет возвращать строку с форматом «Car: make model (year)».