我有一个具有实例属性a,b,c的类。我使用了textwrap,但它不起作用。
def __str__(self):
import textwrap.dedent
return textwrap.dedent(
"""#{0}
{1}
{2}
""".format(self.a,self.b,self.c)
然而,这不起作用,我得到像
这样的输出a
b
c
答案 0 :(得分:6)
使用"""
呈现字符串时,会计算换行符和空格。如果你想让它在没有dedent的情况下工作,你的代码应该是这样的:
def __str__(self):
return """#{0}
{1}
{2}
""".format(self.a,self.b,self.c)
否则,{1}
和{2}
之前的标签也在字符串中。或者,您可以使用:
"#{0}\n{1}\n{2}\n".format(self.a,self.b,self.c)
关于dedent以及为什么它不起作用,请注意documentation:
中的这一行“hello”和“\ thello”这些行被认为没有共同的前导空格。
所以如果你想让dedent工作,你需要每一行开始相同,所以你的代码应该是:
return textwrap.dedent(
"""\
#{0}
{1}
{2}
""".format(self.a,self.b,self.c))
在这种情况下,每一行都以\t
开头,dedent
识别并删除。
答案 1 :(得分:3)
这样做:
from textwrap import dedent
def __str__(self):
return textwrap.dedent("""\
#{0}
{1}
{2}
""".format(self.a,self.b,self.c))
答案 2 :(得分:0)
textwrap.dedent
剥离公共领先空白(请参阅documentation)。如果你想要这个,你需要做这样的事情:
def __str__(self):
S = """\
#{0}
{1}
{2}
"""
return textwrap.dedent(S.format(self.a, self.b, self.c))