Магический метод  __repr__ в Python: использование и примеры

В этом уроке рассмотрим, как использовать магический метод  __repr__ в Python, а также разницу между методами __repr__ и __str__.

Что такое магический метод __repr__ в Python?

Метод __repr__ в Python определяет поведение, когда вы передаете экземпляр класса в функцию repr().

Метод __repr__ возвращает строковое представление объекта. Обычно __repr__() возвращает строку, которую можно выполнить и вернуть то же значение, что и объект. Другими словами, если вы передадите возвращаемую строку метода object_name.__repr__() в функцию eval(), вы получите то же значение, что и object_name. Давайте посмотрим на пример.

Сначала определите класс Person с тремя атрибутами экземпляра: first_name, Last_name и age:

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

Во-вторых, создайте новый экземпляр класса Person и отобразите его строковое представление:

person = Person('John', 'Doe', 25)
print(repr(person))

Выход:

<__main__.Person object at 0x000001F51B3313A0>

По умолчанию выходные данные содержат адрес памяти объекта person. Чтобы настроить строковое представление объекта, вы можете реализовать метод __repr__ следующим образом:

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def __repr__(self):
        return f'Person("{self.first_name}","{self.last_name}",{self.age})'

Когда вы передаете экземпляр класса Person в функцию repr(), Python автоматически вызывает метод __repr__. Например:

person = Person("John", "Doe", 25)
print(repr(person))

Выход:

Person("John","Doe",25)

Если вы выполните возвращаемую строку Person («John»,»Doe»,25), она вернет объект person.

Если класс не реализует метод __str__ и вы передаете экземпляр этого класса в функцию str(), Python возвращает результат метода __repr__, поскольку внутри метод __str__ вызывает метод __repr__:

Например:

person = Person('John', 'Doe', 25)
print(person)

Выход:

Person("John","Doe",25)

Если класс реализует метод __str__, Python вызовет метод __str__, когда вы передаете экземпляр класса в функцию str(). Например:

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def __repr__(self):
        return f'Person("{self.first_name}","{self.last_name}",{self.age})'

    def __str__(self):
        return f'({self.first_name},{self.last_name},{self.age})'


person = Person('John', 'Doe', 25)
# use str()
print(person)

# use repr()
print(repr(person))

Выход:

(John,Doe,25)
Person("John","Doe",25)

Разница между методами __str__ и __repr__

Основное различие между методами __str__ и __repr__ заключается в целевой аудитории.

Метод __str__ возвращает строковое представление объекта, читаемое человеком, а метод __repr__ возвращает строковое представление объекта, читаемое машиной.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *