Итак, в рамках задачи 17.6 в «Думай как компьютерный ученый» я написал класс под названием «Кенгуру»:
class Kangaroo(object):
def __init__(self, pouch_contents = []):
self.pouch_contents = pouch_contents
def __str__(self):
'''
>>> kanga = Kangaroo()
>>> kanga.put_in_pouch('olfactory')
>>> kanga.put_in_pouch(7)
>>> kanga.put_in_pouch(8)
>>> kanga.put_in_pouch(9)
>>> print kanga
"In kanga's pouch there is: ['olfactory', 7, 8, 9]"
'''
return "In %s's pouch there is: %s" % (object.__str__(self), self.pouch_contents)
def put_in_pouch(self, other):
'''
>>> kanga = Kangaroo()
>>> kanga.put_in_pouch('olfactory')
>>> kanga.put_in_pouch(7)
>>> kanga.put_in_pouch(8)
>>> kanga.put_in_pouch(9)
>>> kanga.pouch_contents
['olfactory', 7, 8, 9]
'''
self.pouch_contents.append(other)
Что сводит меня с ума, так это то, что я хотел бы иметь возможностьнапишите строковый метод, который прошел бы модульный тест под __str__
, как написано.Вместо этого я получаю сейчас:
In <__main__.Kangaroo object at 0x4dd870>'s pouch there is: ['olfactory', 7, 8, 9]
В сущности, мне интересно, есть ли какая-нибудь функция, которую я могу выполнять на kanga = Kangaroo, чтобы вывод этой функции составлял те 5 символов,т.е. функция (канга) -> "канга".
Есть идеи?
Редактировать: Чтение первого ответа заставило меня понять, что есть более краткий способ задать мой первоначальный вопрос.Есть ли способ переписать __init__
так, чтобы следующий код действовал как написано?
>>> somename = Kangaroo()
>>> somename.name
'somename'