Разница между __str__ и __repr__? - PullRequest
       166

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

2417 голосов
/ 17 сентября 2009

В чем разница между __str__ и __repr__ в Python?

Ответы [ 22 ]

0 голосов
/ 06 июня 2019

__str__ может быть вызвано для объекта путем вызова str(obj) и должно вернуть читаемую человеком строку.

__repr__ может быть вызвано для объекта путем вызова repr(obj) и должно возвращать внутренний объект (поля / атрибуты объекта)

Этот пример может помочь:

class C1:pass

class C2:        
    def __str__(self):
        return str(f"{self.__class__.__name__} class str ")

class C3:        
    def __repr__(self):        
         return str(f"{self.__class__.__name__} class repr")

class C4:        
    def __str__(self):
        return str(f"{self.__class__.__name__} class str ")
    def __repr__(self):        
         return str(f"{self.__class__.__name__} class repr")


ci1 = C1()    
ci2 = C2()  
ci3 = C3()  
ci4 = C4()

print(ci1)       #<__main__.C1 object at 0x0000024C44A80C18>
print(str(ci1))  #<__main__.C1 object at 0x0000024C44A80C18>
print(repr(ci1)) #<__main__.C1 object at 0x0000024C44A80C18>
print(ci2)       #C2 class str
print(str(ci2))  #C2 class str
print(repr(ci2)) #<__main__.C2 object at 0x0000024C44AE12E8>
print(ci3)       #C3 class repr
print(str(ci3))  #C3 class repr
print(repr(ci3)) #C3 class repr
print(ci4)       #C4 class str 
print(str(ci4))  #C4 class str 
print(repr(ci4)) #C4 class repr
0 голосов
/ 18 апреля 2019
  1. __str__ должен возвращать строковый объект, тогда как __repr__ может возвращать любое выражение Python.
  2. Если реализация __str__ отсутствует, функция __repr__ используется как запасной вариант. Если функция __repr__ отсутствует, отступления не будет.
  3. Если функция __repr__ возвращает строковое представление объекта, мы можем пропустить реализацию функции __str__.

Источник: https://www.journaldev.com/22460/python-str-repr-functions

...