Python'da __repr__ ve __str__ arasındaki fark nedir?


cevap 1:

Özlü bir şekilde açıklamaya çalışacağım. _str_ ve _repr_'nin ikisi de küçük farklarla dize gösterimi içindir. Repr (nesne teknik ayrıntıları) ile python ifadesini değerlendirmek için python eval () işlevini çağırabilirsiniz, ancak yapamazsınız.

>>> repr (4) == str (4)
Doğru
>>> repr ('basit hain ...') == str ('basit hain ...')
Yanlış

Şimdi birey bu davranışı anlamak için çıktı görmek için yapmak

>>> s = 'basit hain ...'
>>> cevaplar
"'basit hain ...'"
>>> str (s)
'basit hain ...'
>>> str (4)
'4'
>>> repr (4)
'4'

_Repr_ ve _str_ öğelerini anlamak için python eval işlevini kullanma

>>> eval (repr ('basit hain ...'))
'basit hain ...'
>>> eval (str ('basit hain ...'))
Geri izleme (en son yapılan son arama):
   içindeki "" dosyası, satır 1
   içindeki "" dosyası, satır 1
NameError: 'basit hain ...' adı tanımlanmadı

Şimdi bu özelliği nerede kullanacağız. Python'da _repr_, Object bilgilerini vermek için kullanılır ve _str_ yazdırma veya görüntüleme amacıyla kullanılır.

  • Nesne hakkında daha teknik ayrıntılar vermek için uyguladığınız her sınıf için __repr__ uygulamaya çalışın. Okunabilirliğin daha önemli olduğunu düşündüğünüz sınıflar için __str__ uygulamaya çalışın

Bu örneği internette buldum

>>> datetime ithalatından datetime
>>> şimdi = datetime.now ()
>>> repr (şimdi)
'datetime.datetime (2013, 2, 5, 4, 43, 11, 673075)'
>>> str (şimdi)
'2013-02-05 04: 43: 11.673075'

Umarım bunu anlarsın.


cevap 2:

__Repr__ için, "Mümkünse, bu, aynı değere sahip bir nesneyi yeniden oluşturmak için kullanılabilecek geçerli bir Python ifadesi gibi görünmelidir (uygun bir ortam verilir). Bu mümkün değilse, < .some yararlı açıklama ...> iade edilmelidir. "

Yani, somut olarak, "xyzzy" bir dize için __str__ dize olurdu: xyzzy

oysa dize için __repr__ şu dize olur: 'xyzzy'


cevap 3:

__Repr__ için, "Mümkünse, bu, aynı değere sahip bir nesneyi yeniden oluşturmak için kullanılabilecek geçerli bir Python ifadesi gibi görünmelidir (uygun bir ortam verilir). Bu mümkün değilse, < .some yararlı açıklama ...> iade edilmelidir. "

Yani, somut olarak, "xyzzy" bir dize için __str__ dize olurdu: xyzzy

oysa dize için __repr__ şu dize olur: 'xyzzy'