str__ ve __repr__ arasındaki fark nedir?
Python'da __str__
ve __repr__
arasındaki fark nedir?
2527
3
Python'da __str__
ve __repr__
arasındaki fark nedir?
Aksini sağlamak için özel olarak hareket etmediğiniz sürece, çoğu sınıfın her ikisi için de yararlı sonuçları yoktur:
Gördüğünüz gibi -- hiçbir fark yok ve sınıf ve nesnenin
id
si dışında hiçbir bilgi yok. Eğer ikisinden sadece birini geçersiz kılarsanız...:Gördüğünüz gibi, eğer
__repr__
geçersiz kılınırsa,__str__
için de kullanılır, ancak tersi geçerli değildir.Bilinmesi gereken diğer önemli bilgiler: Yerleşik bir konteyner üzerindeki
__str__
, içerdiği öğeler için__str__
DEĞİL,__repr__
kullanır. Ve, tipik dokümanlarda bulunan konuyla ilgili kelimelere rağmen, neredeyse hiç kimse nesnelerin__repr__
sinieval
in eşit bir nesne oluşturmak için kullanabileceği bir dize yapmakla uğraşmaz (çok zor, VE ilgili modülün aslında nasıl içe aktarıldığını bilmemek aslında bunu imkansız kılar).Bu nedenle, benim tavsiyem:
__str__
'yi makul ölçüde insan tarafından okunabilir hale getirmeye ve__repr__
'yi olabildiğince açık hale getirmeye odaklanın; bu,__repr__
'nin döndürdüğü değeri__eval__
için girdi olarak kabul edilebilir hale getirme gibi bulanık ve ulaşılamaz bir hedefe engel olsa bile!__repr__
: python nesnesinin temsili genellikle eval onu bu nesneye geri dönüştürecektir__str__
: metin biçiminde o nesne olduğunu düşündüğünüz şeydirÖrneğin.
effbot tarafından an (An Unofficial) Python Reference Wiki (archive copy) adresinden alınmıştır:
str
"*bir nesnenin "gayri resmi" dize gösterimini hesaplar. Bu, geçerli bir Python ifadesi olması gerekmediği için
repr`'den farklıdır: bunun yerine daha uygun veya kısa bir temsil kullanılabilir.*"