Python类__str__仅返回一行字典

时间:2019-05-25 11:10:36

标签: python python-3.x class object

开始学习python,如果很初级,请抱歉。 我想使用__str__()从字典中打印所有对,字典是我类的实例属性。

我执行以下操作:

from collections import defaultdict


class Node:

    nextindex = 0

    def __init__(self):
        self.targetnode = defaultdict(Node)
        self.index = Node.nextindex
        Node.nextindex += 1

    def add(self, line, pos=0):
        if pos == len(line):
            self.targetnode[""] = None
        else:
            c = line[pos]
            self.targetnode[c].add(line, pos+1)

    def __str__(self):
        for c, tnode in self.targetnode.items():
            return "Node %d Alphabet %s Targetnode %d" % (self.index, c, tnode.index)


root = Node()

for line in file:
    root.add(line)

print(root)

file包含一个单词列表,每行一个单词,就像:

her
his
here

我所期望的:

Node 0 Alphabet h Targetnode 1
Node 1 Alphabet e Targetnode 2
Node 2 Alphabet l Targetnode 3

我真正得到的是:

Node 0 Alphabet h Targetnode 1

(h是我的单词表中的第一个字母)

有人可以告诉我为什么它只返回一行吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要在循环后返回,或使用str.join

def __str__(self):
    return '\n'.join([
        'Node %d Alphabet %s Targetnode %d'
        % (self.index, c, tnode.index)
        for c, tnode in self.targetnode.items()
    ])

如果不想用换行符分隔每个字符,请将'\n'更改为逗号', '