Python класс __str__ возвращает только одну строку dict - PullRequest
0 голосов
/ 25 мая 2019

начинаю изучать питон, так что извините, если это элементарно. Я хочу использовать __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 голосов
/ 25 мая 2019

Вам необходимо вернуться после цикла или использовать 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', скажем, на запятую ', '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...