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

__str__ vs __repr__ В питоне

Резюме: Ключевой целью __STR__ и __REPR__ – вернуть строковое представление объекта Python. То, как они представляют собой строковый объект дифференцирует их. STR () & __str () __ Возвращение печатного / читаемого строкового представления объекта, которое сосредоточено на конечном пользователе.repr () & __REPR () __ Вернуть строковое представление объекта, который является действительным объектом Python, что-то Вы можете пройти … __str__ vs __repr__ в Python Подробнее »

Автор оригинала: Shubham Sayon.

Резюме: Ключевая цель __str__ и __repr__ это вернуть строковое представление объекта Python. Как они представлять Струнный объект дифференцирует их.

  • str () & __str () __ вернуть печатный / читаемый Строковое представление объекта, которое сосредоточено на конечном пользователе.
  • rep () & __repr () __ Вернуть строковое представление объекта, которое является Допустимый объект Python , то, что вы можете перейти к Eval () или введите в оболочку Python, не получив ошибку. Его главная цель – быть недвусмысленно Отказ

Заявление о проблеме: В чем разница между __str__ и __repr__ в Python?

Во-первых, давайте обсудим, почему это один из наиболее распространенных вопросов в Интернете. Давайте посмотрим на пример, чтобы понять причину путаницы.

Пример 1:

name = 'FINXTER'
print(str(name))
print(repr(name))

Выход:

FINXTER
'FINXTER'

Теперь вы видите, почему это так запутано! 🤔 Оба они, кажется, печатают строку Finxter Отказ Таким образом, они оба являются встроенными функциями, и оба возвращают строковое представление объекта; Единственная видимая разница в этом случае – str () Распечат строку без кавычек ( Finxter ), а rep () Распечатывает свои цитаты ( 'Finxter' ).

Примечание : Если вы задаетесь вопросом, почему мы используем rep () и str () вместо __repr__ и __str__ Тогда, пожалуйста, посмотрите на записку, приведенную ниже:

  • __repr__
    • Называется rep () Встроенная функция
  • __str__
    • Называется str () Встроенная функция

Но теперь давайте посмотрим на другой пример;

Пример 2:

from datetime import datetime

d = datetime.now()
print(str(d))
print(repr(d))

Выход:

2020-11-04 16:38:20.048483
datetime.datetime(2020, 11, 4, 16, 38, 20, 48483)

Во втором примере мы можем четко визуализировать разницу между rep () и str () Отказ

Давайте посмотрим на то, о чем говорит официальная документация о объект .__ riv __ ( self ) и объект .__ ул __ ( self ) :

объект .__ rep __ ( self ) : Вызывается rep () Встроенная функция для вычисления « официальный » строковое представление объекта.

объект .__ ул __ (я) : Вызывается str () Встроенная функция и оператор печати для вычисления строкового представления « неформально » объекта.

Другими словами, мы можем сказать, что:

❖ Цель __repr__ – быть однозначным

__repr __ () Функция Возвращает представление объекта любого допустимого выражения Python, например кортеж , Словарь , строка и т. Д. Это значит, когда rep () Функция вызывается на объекте, это вернет сам объект и, следовательно, можно оценить с помощью Eval () функция для воссоздания самого объекта из-за его однозначной природы.   Таким образом, («25») Отказ

Давайте посмотрим на быстрый пример, где мы можем использовать rep () на выражение и оценить его с помощью Eval () функция.

Примечание: Вы не можете использовать Eval () Функция на str () который четко изображен в примере ниже.

Пример:

text1 = 'a string'
text2 = eval(repr(text1))
if text1 == text2:
  print("eval() Works!")
text3 = eval(str(text1))
if text1 == text3:
  print("eval() Works!")

Выход:

eval() Works!
Traceback (most recent call last):
  File "main.py", line 5, in 
    text3 = eval(str(text1))
  File "", line 1
    a string
      ^
SyntaxError: unexpected EOF while parsing

❖ Цель __str__ – быть читаемой

Цель __str__ не однозначно, скорее его цель состоит в том, чтобы предоставить представление, что пользователь больше читаемый пользователю. Таким образом, str (25) == ул. ("25") Отказ

Давайте посмотрим на очень простой пример, который демонстрирует однозначную природу rep () и аспект читаемости str () Отказ

if str(25)==str("25"):
  print("Goal of __str__ : Readability")
if repr(25)!=repr("25"):
  print("Goal of __repr__ : Unamgiuity")

Выход:

Goal of __str__ : Readability
Goal of __repr__ : Unamgiuity

Проще говоря, __repr__ для разработчиков пока __str__ Для клиентов!

Точки запомнить

❖ Для контейнеров __str__ использует содержащиеся объекты __repr__

Чтобы упростить вещи, давайте возьмем помощь пример:

rank = {'Rick': 1}
language = ['Python', 'Java']
error = (404, 'status_code')
for item in (rank, language, error):
  print(f"{str(type(item)):}")
  print(f"repr() representation: {repr(item):}")
  print(f"str() representation: {str(item)}")
  print("\n")

Выход:


repr() representation: {'Rick': 1}
str() representation: {'Rick': 1}



repr() representation: ['Python', 'Java']
str() representation: ['Python', 'Java']



repr() representation: (404, 'status_code')
str() representation: (404, 'status_code')

В приведенном выше примере ясно, что даже когда мы используем str () На объекте контейнера функция str () вызывает их __repr () __ метод; Следовательно, мы получаем сам объект как вывод, и нет разницы между ул. и rep () При использовании с объектами. Это оправдывает, что для контейнеров __str__ использует содержащиеся объекты « __repr__ Отказ

❖ Реализация по умолчанию __str__ и __repr__ бесполезно

Реализация по умолчанию __str__ и __repr__ бесполезен и если вы не гарантируете конкретно определить и использовать их, большинство классов не имеют полезных результатов. Давайте сделаем все возможное с помощью другого примера:

class Finxter(object):
  pass 
print(str(Finxter()))
print(repr(Finxter()))

Выход:

<__main__.Finxter object at 0x7f85641d15e0>
<__main__.Finxter object at 0x7f85641d15e0>

Как видно выше, нет разницы между методом, ни в одной информации за пределами классов ID Отказ

Примечание: Объект будет вести себя как будто __str __ = __ raper__ Если __repr__ определяется, а __str__ не является.

Теперь давайте попробуем переопределите __str__ и __repr__ Методы для визуализации их поведения на Пользовательские объекты. Пожалуйста, следуйте примеру, указанному ниже.

Пример:

class Finxter(object):
  def __str__(object):
     return str("Freelancing")
  
  def __repr__(object):
     return repr("Freelancing")

print(str(Finxter()))
print(repr(Finxter()))
print(eval(repr(Finxter())))

Выход:

Freelancing
'Freelancing'
Freelancing

Из приведенного выше примера понятно, что __repr __ () Кабина легко переопределить так, чтобы rep () работает по-другому.

Примечание: Если вы переопределите __repr__ это также будет использоваться для __str__ , но наоборот невозможен. Давайте посмотрим на это в приведенном ниже примере.

Пример A: Переопределение __repr__ также переопределяет __str__

class Finxter(object):
  def __repr__(object):
     return repr("Freelancing")

print(str(Finxter()))
print(repr(Finxter()))

Выход:

'Freelancing'
'Freelancing'

Пример B: Переопределение __str__ не влияет на __repr__

class Finxter(object):
  def __str__(object):
     return str("Freelancing")

print(str(Finxter()))
print(repr(Finxter()))

Выход:

Freelancing
<__main__.Finxter object at 0x7f3b284ef5e0>

Заключение

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

ул. Repra ()
Это неофициальное строковое представление и используется для чтения объекта. Это официальное строковое представление и используется для создания объекта однозначно.
Генерирует вывод, предназначенный для конечных пользователей. Генерирует выход, который полезен для разработчиков.

Пожалуйста, подпишитесь и оставайтесь настроенными для более интересных статей!

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.

Вы можете связаться со мной @:

Оригинал: “https://blog.finxter.com/python-__str__-vs-__repr__/”