Форум сайта python.su
0
Подскажите, пожалуйста, чем вызывается здесь метод def __str__ ?
class Critter(object): def __init__(self, name): print("A new critter has been born!") self.name = name def __str__(self): rep = "Critter object\n" rep += "name: " + self.name + "\n" return rep def talk(self): print("Hi. I'm", self.name, "\n") # main crit1 = Critter("Poochie") crit1.talk() crit2 = Critter("Randolph") crit2.talk() print("Printing crit1:") print(crit1)
Отредактировано Franek (Авг. 4, 2016 19:11:24)
Офлайн
49
Franek
print(crit1)
Офлайн
857
Функция str() вызывает этот метод, а сама функция str() вызывается неявно.
Отредактировано py.user.next (Авг. 5, 2016 13:32:06)
Офлайн
0
4kpt_IV
py.user.next
Спасибо!
Подскажите, ещё. Хочу чтобы на экране отобразились числовые значения в виде строки. Почему возникает ошибка о том, что “возвращается не строка”?
class Critter(object): def __init__(self, name, hunger = 0, boredom = 0): self.name = name self.hunger = hunger self.boredom = boredom def __str__(self): h = crit.hunger b = crit.boredom h = str(h) b = str(b) return h, b crit = Critter("Boby") print(crit)
Отредактировано Franek (Авг. 5, 2016 13:37:06)
Офлайн
0
Разобрался. Оказывается, дело было в команде Return (нельзя было писать возвращаемые значения через запятую).
Как сделать, чтобы Return возвращала оба значения, каждую с новой стркои? И h и b?
Офлайн
1
Вроде она и возвратила оба. В таком виде вы возвращаете кортеж:
FranekПотому что
TypeError: __str__ returned non-string (type tuple)
return h, b
return (h, b)
FranekЕсли нужно, чтобы было возвращено две строки с какими-то данными, я бы переписал __str__ так:
Как сделать, чтобы Return возвращала оба значения, каждую с новой стркои? И h и b?
def __str__(self): return str(crit.hunger) + "\n" + str(crit.boredom)
Отредактировано Stepan_M (Авг. 5, 2016 14:20:53)
Офлайн
0
Stepan_M
спасибо, работает.
Офлайн
857
>>> class Critter: ... ... def __init__(self, name, hunger=0, boredom=0): ... self.name = name ... self.hunger = hunger ... self.boredom = boredom ... ... def __str__(self): ... return '[{} {}]'.format(self.hunger, self.boredom) ... >>> crit = Critter('Boby') >>> print(crit) [0 0] >>>
Отредактировано py.user.next (Авг. 5, 2016 14:26:04)
Офлайн
76
def __str__(self): h = crit.hunger b = crit.boredom
Офлайн
0
Romissevd
Не понял, зачем?
Офлайн