Python 2: Yalnızca __str __ () işlevini uygulayın ve bir unicode döndürün.
Ne zaman __unicode__()
atlanır ve biri unicode(o)
veya çağırırsa u"%s"%o
, Python arar o.__str__()
ve sistem kodlamasını kullanarak unicode'a dönüştürür. ( Belgelerine__unicode__()
bakınız .)
Bunun tersi doğru değildir. Uygular __unicode__()
ancak uygulamazsanız __str__()
, birisi aradığında str(o)
veya "%s"%o
Python geri döner repr(o)
.
gerekçe
Niçin bir dönüş için çalışacak unicode
dan __str__()
?
Eğer __str__()
getiri unicode, Python otomatik olarak dönüştürür str
sistem kodlama kullanarak.
Avantajı nedir?
① Sistem kodlamasının ne olduğu konusunda endişe duymanızı engeller (örn locale.getpreferredencoeding(…)
.). Bu sadece kişisel olarak dağınık değil, aynı zamanda sistemin yine de ilgilenmesi gereken bir şey olduğunu düşünüyorum. Care Dikkatli olursanız, kodunuz __str__()
unicode döndüren Python 3 ile çapraz uyumlu olabilir .
Adlı bir işlevden bir unicode döndürmek aldatıcı değil __str__()
mi?
Bir miktar. Ancak, zaten yapıyor olabilirsiniz. Eğer varsa from __future__ import unicode_literals
dosyanızın üst kısmında, sen bile bilmeden bir unicode dönüyoruz iyi bir şans var.
Python 3 ne olacak?
Python 3 kullanmaz __unicode__()
. Ancak, __str__()
Python 2 veya Python 3 altında unicode döndürecek şekilde uygularsanız , kodunuzun bu kısmı çapraz uyumlu olacaktır.
Ya unicode(o)
büyük ölçüde farklı olmak istersem str()
?
Hem __str__()
(muhtemelen geri dönen str
) hem de uygulayın __unicode__()
. Ben bu nadir olacağını hayal, ama önemli ölçüde farklı çıktı isteyebilirsiniz (örneğin, gibi özel karakterlerin ASCII sürümleri ":)"
için u"☺"
).
Bazılarının bunu tartışmalı bulabileceğini fark ettim.