python格式化字符串以忽略缩进空格

yay*_*ayu 2 python string formatting

我有一个实例属性为a,b,c的类.我使用textwrap但它不起作用.

 def __str__(self):
    import textwrap.dedent
    return textwrap.dedent(
    """#{0}
    {1}
    {2}
    """.format(self.a,self.b,self.c)
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,我得到的输出就像

a
        b
        c
Run Code Online (Sandbox Code Playgroud)

Kor*_*rem 6

使用渲染字符串时""",会计算换行符和空格.如果你想让它在没有dedent的情况下工作,你的代码应如下所示:

def __str__(self):
   return """#{0}
{1}
{2}
""".format(self.a,self.b,self.c)
Run Code Online (Sandbox Code Playgroud)

否则,之前{1}和之前的选项卡{2}也在字符串中.或者,您可以使用:

"#{0}\n{1}\n{2}\n".format(self.a,self.b,self.c)
Run Code Online (Sandbox Code Playgroud)

关于dedent以及为什么它不起作用,请注意文档中的这一行:

"hello"和"\ thello"这些行被认为没有共同的前导空格.

因此,如果你想让dedent工作,你需要每行开始相同,所以你的代码应该是:

    return textwrap.dedent(
    """\
    #{0}
    {1}
    {2}
    """.format(self.a,self.b,self.c))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,每行开头\t,dedent识别并删除.