Магический метод __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__ возвращает строковое представление объекта, читаемое машиной.