Цели этих методов являются законными (синтаксис не слишком большой) , но какой из них выбрать, зависит от того, что вы пытаетесь сделать.
Возможно, простой пример поможет прояснить некоторые вещи.
Давайте определим User
класс:
class User:
def __init__(self, name):
self.name = name
def __str__(self):
return "My name is %s" % self.name
def show(self):
print "My name is %s" % self.name
Примечание: Я изменил имя метода с print
на show
, потому что в python 2.x print
- это ключевое слово, поэтому вы не можете его использовать.
Теперь давайте попробуем класс User
, чтобы увидеть разницу между __str__
и show
?:
>>> rik = User('Ricky')
>>> rik.show()
My name is Ricky
>>> rik.__str__()
'My name is Ricky'
>>> print rik
My name is Ricky
Код должен объяснить сам.
__str__
- это Специальное имя метода , что означает, что когда вы вызываете print rik
, python ищет rik.__str__
, если такой метод определен, то он называется rik.__str__()
, и возвращаемая строка будет быть напечатанным.
Основная точка __str__
:
- не следует звонить
print
- и должны вернуть
string
.
show
С другой стороны, вызов show()
напрямую выводит строку (и возвращает None
). Вот и все.