在__str__类属性中放置一个循环

时间:2018-02-15 15:29:02

标签: python loops class for-loop attributes

我写了这个简单的类:

class MyDictionary:
def __init__(self):
    self.dictionary = {}

然后我填写我的词典:

>>> fruit = MyDictionary()
>>> fruit.dictionary["apples"] = 13
>>> fruit.dictionary["cherrys"] = 12

然后当我写>>>时,我希望如此打印(水果),一个词典看起来像:

I have 13 apples in my bag
I have 12 cherrys in my bag

所以我创建了这个简单的属性类:

def __str__(self):
    for key, value in self.dictionary.items():
        return "I have {} {} in my bag".format(value, key)

但这只返回第一行:

I have 13 apples in my bag

并且不打印cherrys系列!为什么?如何将循环放在 str 属性中?

非常感谢你帮助我!

1 个答案:

答案 0 :(得分:0)

return打破了你的函数的控制流,并使它立即退出返回你传递给它的值,这就是为什么它会在第一次迭代时停止使用你的代码发布。这完全符合预期,请参阅return statement的文档。

在返回之前,您需要在某处积累部分结果,例如:

def __str__(self):
    pieces = []
    for key, value in self.dictionary.items():
        pieces.append("I have {} {} in my bag".format(value, key))
    return "\n".join(pieces)