在Python中对齐字符串的组合

在Python中对齐字符串的组合,python,format,alignment,Python,Format,Alignment,我知道,在Python中,要在一定宽度内对齐字符串,可以使用格式字符串。例如,以下代码以30个空格的宽度打印以字符串“可读性计数”为中心的文本: print "{0: ^30}".format("Readability counts") 现在我想将字符串“2+4”居中,但我想用同一对象的两个属性(obj.atr1和obj.atr2)来构建它 我可以先将这两个值组合成一个字符串(使用连接或格式化),然后将该字符串传递给下一个格式字符串,但我想知道是否有更优雅的方法来处理这个问题。最好只使用一个格

我知道,在Python中,要在一定宽度内对齐字符串,可以使用格式字符串。例如,以下代码以30个空格的宽度打印以字符串“可读性计数”为中心的文本:

print "{0: ^30}".format("Readability counts")
现在我想将字符串“2+4”居中,但我想用同一对象的两个属性(
obj.atr1
obj.atr2
)来构建它

我可以先将这两个值组合成一个字符串(使用连接或格式化),然后将该字符串传递给下一个格式字符串,但我想知道是否有更优雅的方法来处理这个问题。最好只使用一个格式操作,因为这将允许我将
obj
作为参数传递,并使用格式字符串获取属性。大致如下的事情

print "{0.atr1} + {0.atr2}".format(obj)
。。但后来加上了对中

我知道当我做这样的事情时它会起作用

print "{0: ^30}".format("{0.atr1} + {0.atr2}".format(obj))

。。但是,如果我想在最左边的格式字符串中使用
obj
的其他属性,这是非常不方便的。

您的上一种方法似乎是明智的,您仍然可以使用其他
obj
属性再次传递它:

print "{0: ^30} | {1.atr3}".format("{0.atr1} + {0.atr2}".format(obj), obj)

很公平,我同意。