gpt4 book ai didi

python - 自定义 python 对象的 pretty-print __str__

转载 作者:行者123 更新时间:2023-12-01 00:06:14 25 4
gpt4 key购买 nike

在以下两个类中:

from dataclasses import dataclass
from typing import List

@dataclasses
class A:
statements: List[str]
def __str__(self) -> str:
return "\n".join(f"{s}" for s in self.statements)
@dataclasses
class B:
objects: List[A]
def __str__(self) -> str:
return "From B\n".join(f"{o}" for o in self.objects)

有没有一种方法可以在尊重缩进的情况下以漂亮的方式打印它们。这意味着当我只打印对象 A 时,我将获得它所包含的内容的列表:

A

hello
world

当我打印 B 时,我将得到:

B

From B
hello
world

我自己的测试仅识别第一个对象:

>>> a = A(statements=[1, 2, 3])
>>> b = A(statements=[4, 5, 6])
>>> print(a)
1
2
3
>>> dd = B(objects=[a, b])
>>> print(dd)
From B
1
2
3
4
5
6

最佳答案

您可以使用textwrap标准库中的模块:

>>> from dataclasses import dataclass
>>> from typing import List
>>> import textwrap

>>> @dataclass
class A:
statements: List[str]
def __str__(self) -> str:
return "\n".join(f"{s}" for s in self.statements)

@dataclass
class B:
objects: List[A]
def __str__(self) -> str:
return "From B\n" + textwrap.indent(
"\n".join(str(o) for o in self.objects),
" ",
)

>>> alphas = [A(statements=[1, 2, 3]), A(statements=[4, 5, 6])]
>>> beta = B(objects=alphas)
>>> delta = B(objects=[beta])
>>> print(str(delta))
From B
From B
1
2
3
4
5
6

关于python - 自定义 python 对象的 pretty-print __str__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59959013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com