【发布时间】:2010-08-22 22:09:58
【问题描述】:
因此,作为“像计算机科学家一样思考”中问题 17.6 的一部分,我编写了一个名为 Kangaroo 的类:
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 个字符,即 function(kanga) -> "kanga"。
有什么想法吗?
编辑:
阅读第一个答案让我意识到有一种更简洁的方式来问我原来的问题。有没有办法重写__init__,使以下代码在编写时有效?
>>> somename = Kangaroo()
>>> somename.name
'somename'
【问题讨论】:
-
看起来第一个答案消失了?!
-
@John Machin 也许我暗示黑客的恶臭对海报来说是可恶的;)
-
@aaronasterling 我删除了你的答案吗?我什至不知道我能做到这一点。如果是这样,完全是新手事故。对不起,伙计。
-
@tel,不,不是你:你不能那样做。我对答案发表了评论,提出了一种非常老套的方法来做你想做的事,但它并没有给出答案。我怀疑这就是他们删除它的原因。
-
@tel:offtopic,但您上面示例中的
pouch_contents = []可能不会按照您的意愿行事。见the second "classic blunder" in this post。
标签: python string printing class-method