Автор оригинала: Pankaj Kumar.
Мы рассмотрим два важных функция Python Object Object, которые очень полезны в отладке кода Python, путем регистрации полезной информации относительно объекта.
Python __str __ ()
Этот метод возвращает строка представление объекта. Этот метод называется, когда Печать ()
или str ()
Функция вызывается на объекте.
Этот метод должен вернуть строковый объект. Если мы не реализуем функцию __STR __ () для класса, то используется встроенная реализация объекта, которая фактически вызывает функцию __REPR __ ().
Python __repr __ ()
Функция Python __repr __ () Возвращает представление объекта в строковом формате. Этот метод называется, когда rep ()
Функция вызывается на объекте. Если возможно, возвращаемая строка должна быть действительным выражением Python, которое можно использовать для восстановления объекта снова.
В чем разница между __str и __repr__?
Если оба функция возвращают строки, которые должны быть представлением объекта, какая разница?
Ну, функция __str__ должна вернуть читаемый человеком формат, который хорош для ведения журнала или отображения некоторой информации о объекте. Принимая во внимание, что функция __repr __ должна вернуть «официальное» строковое представление объекта, которое можно использовать для снова построения объекта. Давайте посмотрим на некоторые примеры ниже, чтобы понять эту разницу в лучшем виде.
Python __str__ и __repr__ примеры
Давайте посмотрим на встроенный класс, где определены как __str__, так и __REPR__.
>>> import datetime >>> now = datetime.datetime.now() >>> now.__str__() '2020-12-27 22:28:00.324317' >>> now.__repr__() 'datetime.datetime(2020, 12, 27, 22, 28, 0, 324317)'
Из вывода ясно, что __str __ () – это больше человеческого дружелюбного, тогда как __repr __ () – это больше информации, богата и машиностроена и может использоваться для восстановления объекта. Фактически, мы можем использовать функцию RAPE () с Eval (), чтобы построить объект.
>>> now1 = eval(repr(now)) >>> now == now1 True
Оба эти функции используются в отладке, давайте посмотрим, что произойдет, если мы не определяем эти функции для пользовательского объекта.
class Person: def __init__(self, person_name, person_age): self.name = person_name self.age = person_age p = Person('Pankaj', 34) print(p.__str__()) print(p.__repr__())
Выход:
<__main__.Person object at 0x10ff22470> <__main__.Person object at 0x10ff22470>
Как вы можете видеть, что реализация по умолчанию бесполезно. Давайте продолжим и реализуем оба этих метода.
class Person: def __init__(self, person_name, person_age): self.name = person_name self.age = person_age def __str__(self): return f'Person name is {self.name} and age is {self.age}' def __repr__(self): return f'Person(name={self.name}, age={self.age})' p = Person('Pankaj', 34) print(p.__str__()) print(p.__repr__())
Выход:
Person name is Pankaj and age is 34 Person(name=Pankaj, age=34)
Ранее мы упомянули, что если мы не реализуем функцию __str__, то функция __REPR__ называется. Просто комментируйте реализацию функции __str __ от класса человека и Печать (P)
будет печатать {Название: Pankaj, Возраст: 34}
Отказ
Резюме
Оба функции __str__ и __repr__ Функции возвращают строку строки объекта. Представление String __STR__ должно быть удобным для мужчин и в основном используется для целей лесозаготовки, тогда как __repr__ представление должно содержать информацию о объекте, чтобы его можно было построить снова. Вы никогда не должны использовать эти функции напрямую и всегда использовать функции str () и drip ().