class MyClass:
def __init__(self):
self.list_ = []
def __repr__(self):
return '\n'.join(['this','should','all','be','on','separate','lines']) + str([str(list_val) for list_val in self.list_])
myClass = MyClass()
myClass.list_.append(MyClass())
myClass.list_[0].list_.append(MyClass())
print(myClass)
このコードが出力されることを期待します:
this
should
all
be
on
separate
lines[this
should
all
be
on
separate
lines[this
should
all
be
on
separate
lines]]
または同様のものですが、代わりに印刷されます
this
should
all
be
on
separate
lines["this\nshould\nall\nbe\non\nseparate\nlines['this\\nshould\\nall\\nbe\\non\\nseparate\\nlines[]']"]
つまり、すでに__repr__
同じクラスの別のオブジェクトのメソッド内にあるときにオブジェクトを文字列に変換しようとすると、改行が に変わり、\n
さらにネストすると になり、\\n
ネストするたびに追加されますエスケープ シーケンスの前にバックスラッシュを追加します。
この質問を読んだ後、__repr__
メソッドは、私が実際に 2 つの文字\
とを必要としていると考えているようですn
が、私はそうではありません: I want the escape sequence \n
. これをオーバーライドして、2 つの個別の文字ではなく改行として解釈するように強制する方法はありますか?