1

reprメソッドを使用してクラスで生成された辞書を返す必要があり、別の行で返す必要があります。

私はそれを行うことができる方法はありますか?

def __repr__:
    return str(self.maze)

期待される:

{
(0, 0):[(0, 1), (1, 0)]
(0, 1):[(0, 0), (1, 1)]
(1, 0):[(0, 0), (1, 1)]
(1, 1):[(0, 1), (1, 0)]
}

私が得たもの:

{(0, 1): [(0, 0), (1, 1)], (1, 0): [(0, 0), (1, 1)], (0, 0): [(0, 1), (1, 0)], (1, 1): [(0, 1), (1, 0)]}

「pprint」を使用できないため、他に方法があるかどうかわかりません。

4

2 に答える 2

3

使用できないのには正当な理由があると思いますpprint...しかし、これはそれほど難しいことではありません。

def __repr__(self):
    inner_lines = '\n'.join('%s:%s' % (k, v) for k, v in self.maze.items())
    return """\
{
%s
}""" % inner_lines

例えば:

>>> def fmt_dct(d):
...   inner_lines = '\n'.join('%s:%s' % (k, v) for k, v in d.items())
...   return """\
... {
... %s
... }""" % inner_lines
... 
>>> print fmt_dct(d)
{
(0, 1):['abcdefg']
(0, 2):['foo', 'bar']
}
于 2014-08-13T05:22:41.610 に答える
2

まず、使用できないと思う唯一の理由が、ドキュメントpprintを見ていないためであり、モジュール内の唯一のものであると想定している場合は、そうではありません。引数として渡します。pprint.pprintStringIOstream

ただし、手動で行いたい場合は、もちろん可能です。ルールを熟考し、それらを Python に変換するだけです。

長い道のりを書きましょう:

def __repr__(self):
    lines = ['{']
    for key, value in self.maze.items():
        lines.append('{}:{}'.format(key, value))
    lines.append(['}'])
    return '\n'.join(lines)

リスト内包表記の書き方を知っていれば、おそらくそれをワンライナーに変えることができます。そうでない場合は、学習するか、5 行のままにしておきます。

于 2014-08-13T05:24:09.470 に答える