當我在下面的代碼中添加對齊方式時
class MyClass():
def __init__(self, a = None, b = [], c = None):
self.a = a
self.b = b
self.c = c
def __str__(self):
return "a: {}, b: {}, c:{}".format(
self.a, self.b, self.c)
if __name__ == "__main__":
obj = MyClass(1, [1,2], 2)
print(obj)
特別是,對于它的串列引數,比如
class MyClass():
def __init__(self, a = None, b = [], c = None):
self.a = a
self.b = b
self.c = c
def __str__(self):
return "a: {:<3}, b: {:<3}, c:{:<3}".format(
self.a, self.b, self.c)
if __name__ == "__main__":
obj = MyClass(1, [1,2], 2)
print(obj)
我收到一個錯誤:
TypeError: unsupported format string passed to list.__format__
這樣做的正確方法是什么?
uj5u.com熱心網友回復:
使用轉換標志強制串列的字串表示形式:
def __str__(self):
return "a: {:<3}, b: {!s:<3}, c:{:<3}".format(
self.a, self.b, self.c)
發生這種情況的原因是list.__format__不支持格式字串迷你語言中的對齊。格式字串語法的檔案描述了更多有關此轉換功能如何作業的資訊。
的轉換場引起格式化之前一個型別強制。通常,格式化值的作業是由
__format__()值本身的方法完成的。但是,在某些情況下,需要強制將型別格式化為字串,覆寫其自己的格式化定義。通過在呼叫之前將值轉換為字串__format__(),可以繞過正常的格式化邏輯。
同樣的事情可以用在 f-strings 上,語法如下:
>>> f"{[1, 2]!s:>10}"
' [1, 2]'
uj5u.com熱心網友回復:
看起來list物件不支持對齊。嘗試將您的代碼更改為:
def __str__(self):
return "a: {:<3}, b: {:<3}, c:{:<3}".format(
self.a, str(self.b), self.c)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311481.html
下一篇:為串列串列中的元素添加引號
