Jaký je v Pythonu rozdíl mezi __repr__ a __str__?


Odpověď 1:

Stručně se pokusím vysvětlit. _str_ a _repr_ jsou pro reprezentaci řetězců s malým rozdílem. S repr (technické detaily objektu) můžete zavolat funkci python eval () a vyhodnotit pythonový výraz, ale nemůžete.

>>> dotisk (4) == str (4)
Skutečný
>>> repr ('simple hain ...') == str ('simple hain ...')
Nepravdivé

Nyní udělejte jednotlivci, aby viděl výstup a porozuměl tomuto chování

>>> s = 'simple hain ...'
>>> dotisk
"'hain hain ...'"
>>> str.
"jednoduchý hain ..."
>>> str (4)
'4'
>>> dotisk (4)
'4'

Použití funkce python eval k pochopení _repr_ a _str_

>>> eval (repr ('simple hain ...'))
"jednoduchý hain ..."
>>> eval (str ('simple hain ...'))
Traceback (poslední poslední hovor):
  Soubor "", řádek 1, v 
  Soubor "", řádek 1, v 
NameError: jméno 'simple hain ...' není definováno

Nyní, kde tuto funkci použít. V Pythonu se _repr_ používá k poskytování informací o objektu a _str_ se používá pro účely tisku nebo zobrazení.

  • Zkuste implementovat __repr__ pro každou třídu, kterou implementujete, abyste získali více technických podrobností o objektu. Zkuste implementovat __str__ pro třídy, o kterých si myslíte, že je důležitá čitelnost

Tento příklad jsem našel na internetu

>>> od datetime import datetime
>>> now = datetime.now ()
>>> dotisk (nyní)
'datetime.datetime (2013, 2, 5, 4, 43, 11, 673075)'
>>> str (nyní)
'2013-02-05 04: 43: 11,673075'

Doufám, že tomu rozumíte.


Odpověď 2:

Pro __repr__: „Pokud je to vůbec možné, mělo by to vypadat jako platný výraz Python, který by mohl být použit k opětovnému vytvoření objektu se stejnou hodnotou (vzhledem k příslušnému prostředí). Pokud to není možné, řetězec formuláře <.. .some užitečné popis ...> by měl být vrácen. "

Konkrétně __str__ pro řetězec „xyzzy“ bude řetězec: xyzzy

zatímco __repr__ pro řetězec by byl řetězec: 'xyzzy'


Odpověď 3:

Pro __repr__: „Pokud je to vůbec možné, mělo by to vypadat jako platný výraz Python, který by mohl být použit k opětovnému vytvoření objektu se stejnou hodnotou (vzhledem k příslušnému prostředí). Pokud to není možné, řetězec formuláře <.. .some užitečné popis ...> by měl být vrácen. "

Konkrétně __str__ pro řetězec „xyzzy“ bude řetězec: xyzzy

zatímco __repr__ pro řetězec by byl řetězec: 'xyzzy'