Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 4, 2016 19:10:32

Franek
От: Беларусь
Зарегистрирован: 2016-05-09
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

Подскажите, пожалуйста, чем вызывается здесь метод 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)

Офлайн

#2 Авг. 4, 2016 19:37:40

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

Franek
print(crit1)

Офлайн

#3 Авг. 5, 2016 01:18:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

Функция str() вызывает этот метод, а сама функция str() вызывается неявно.



Отредактировано py.user.next (Авг. 5, 2016 13:32:06)

Офлайн

#4 Авг. 5, 2016 12:30:37

Franek
От: Беларусь
Зарегистрирован: 2016-05-09
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

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)
TypeError: __str__ returned non-string (type tuple)

Отредактировано Franek (Авг. 5, 2016 13:37:06)

Офлайн

#5 Авг. 5, 2016 13:45:26

Franek
От: Беларусь
Зарегистрирован: 2016-05-09
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

Разобрался. Оказывается, дело было в команде Return (нельзя было писать возвращаемые значения через запятую).
Как сделать, чтобы Return возвращала оба значения, каждую с новой стркои? И h и b?

Офлайн

#6 Авг. 5, 2016 14:04:17

Stepan_M
Зарегистрирован: 2016-07-20
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

Вроде она и возвратила оба. В таком виде вы возвращаете кортеж:

Franek
TypeError: __str__ returned non-string (type tuple)
Потому что
 return h, b
соответствует
 return (h, b)
Другое дело, что print, видимо, не может в таком виде его распечатать (returned non-string)
Franek
Как сделать, чтобы Return возвращала оба значения, каждую с новой стркои? И h и b?
Если нужно, чтобы было возвращено две строки с какими-то данными, я бы переписал __str__ так:
 def __str__(self):
    return str(crit.hunger) + "\n" + str(crit.boredom)

Отредактировано Stepan_M (Авг. 5, 2016 14:20:53)

Офлайн

#7 Авг. 5, 2016 14:25:24

Franek
От: Беларусь
Зарегистрирован: 2016-05-09
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

Stepan_M
спасибо, работает.

Офлайн

#8 Авг. 5, 2016 14:25:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

  
>>> 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)

Офлайн

#9 Авг. 5, 2016 17:43:17

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

     def __str__(self):
        h = crit.hunger
        b = crit.boredom
Что такое crit.hunger? А если не изменяя класса создать экземпляр с именем, допустим pat?

Офлайн

#10 Авг. 6, 2016 10:47:41

Franek
От: Беларусь
Зарегистрирован: 2016-05-09
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод def __str__ чем вызывается?

Romissevd
Не понял, зачем?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version