Рубрики
Без рубрики

Python __str __ () и __repr __ () Функции

Python __str__, Python __REPR__, Python String Представительство, Python STR () Функция, Python Rep (), разница между функциями __str__ и __repr__

Автор оригинала: 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 ().