Mitä eroa Pythonissa on __repr__ ja __str__ välillä?


Vastaus 1:

Yritän ytimekäs selittää. _str_ ja _repr_ ovat molemmat merkkijonon esitykseen pienellä erolla. Repr-toiminnolla (esineen tekniset yksityiskohdat) voit kutsua python eval () -toimintoa arvioimaan python-lausekkeen, mutta et voi.

>>> repr (4) == str (4)
Totta
>>> repr ('yksinkertainen hain ...') == str ('yksinkertainen hain ...')
Väärä

Nyt tee henkilö nähdäksesi tulos ymmärtääksesi tätä käyttäytymistä

>>> s = 'yksinkertainen hain ...'
>>> repr (t)
"'yksinkertainen hain ...'"
>>> str (t)
"yksinkertainen hain ..."
>>> str (4)
'4'
>>> repr (4)
'4'

Python eval -toiminnon avulla ymmärtää _repr_ ja _str_

>>> eval (repr ('yksinkertainen hain ...'))
"yksinkertainen hain ..."
>>> eval (str ('yksinkertainen hain ...'))
Jäljitys (viimeisin puhelu viimeksi):
  Tiedosto "", rivi 1, 
  Tiedosto "", rivi 1, 
NameError: nimeä 'yksinkertainen hain ...' ei ole määritelty

Missä käyttää tätä ominaisuutta. Pythonissa _repr_: tä käytetään objektin tietojen antamiseen ja _str_: tä käytetään tulostamiseen tai käyttötarkoituksen näyttämiseen.

  • Yritä ottaa __repr__ käyttöön jokaisessa luokassa, jonka haluat toteuttaa, jotta saadaan enemmän teknisiä yksityiskohtia objektista. Yritä ottaa __str__ käyttöön luokissa, joiden luettavuus on mielestäsi tärkeämpää.

Löysin tämän esimerkin netistä

>>> päivämääräajasta tuo päivämääräaika
>>> nyt = datetime.now ()
>>> repr (nyt)
'datetime.datetime (2013, 2, 5, 4, 43, 11, 673075)'
>>> str (nyt)
'2013-02-05 04: 43: 11.673075'

Toivottavasti ymmärrät tämän.


Vastaus 2:

Kohdassa __repr__: "Tämän pitäisi näyttää siltä kuin kelvollinen Python-lauseke, jota voitaisiin käyttää objektin luomiseen uudelleen samalla arvolla (sopivalle ympäristölle). Jos tämä ei ole mahdollista, muodon merkkijono <.. .jokuin hyödyllinen kuvaus ...> tulisi palauttaa. "

Joten konkreettisesti __str__ merkkijonolle "xyzzy" olisi merkkijono: xyzzy

kun taas merkkijonon __repr__ olisi merkkijono: 'xyzzy'


Vastaus 3:

Kohdassa __repr__: "Tämän pitäisi näyttää siltä kuin kelvollinen Python-lauseke, jota voitaisiin käyttää objektin luomiseen uudelleen samalla arvolla (sopivalle ympäristölle). Jos tämä ei ole mahdollista, muodon merkkijono <.. .jokuin hyödyllinen kuvaus ...> tulisi palauttaa. "

Joten konkreettisesti __str__ merkkijonolle "xyzzy" olisi merkkijono: xyzzy

kun taas merkkijonon __repr__ olisi merkkijono: 'xyzzy'