gpt4 book ai didi

python - 如何使用 pprint 使用内置的 __str__(self) 方法打印对象?

转载 作者:太空狗 更新时间:2023-10-29 17:36:07 28 4
gpt4 key购买 nike

我有一个 Python 脚本,它处理一个包含报告使用信息的 .txt 文件。我想找到一种使用 pprint 的 pprint(vars(object)) 函数干净地打印对象属性的方法。

脚本读取文件并创建 Report 类的实例。这是类(class)。

class Report(object):
def __init__(self, line, headers):
self.date_added=get_column_by_header(line,headers,"Date Added")
self.user=get_column_by_header(line,headers,"Login ID")
self.report=get_column_by_header(line,headers,"Search/Report Description")
self.price=get_column_by_header(line,headers,"Price")
self.retail_price=get_column_by_header(line,headers,"Retail Price")

def __str__(self):
from pprint import pprint
return str(pprint(vars(self)))

我希望能够干净利落地打印 Report 的实例。

for i,line in enumerate(open(path+file_1,'r')):
line=line.strip().split("|")
if i==0:
headers=line

if i==1:
record=Report(line,headers)
print record

当我打电话

print record

对于 Report 的单个实例,这是我在 shell 中得到的。

{'date_added': '1/3/2012 14:06',
'price': '0',
'report': 'some_report',
'retail_price': '0.25',
'user': 'some_username'}
None

我的问题有两个方面。

首先,这是干净地打印对象属性的好/理想方式吗?使用或不使用 pprint 是否有更好的方法来做到这一点?

其次,为什么

None

最后打印到 shell?我很困惑这是从哪里来的。

感谢任何提示。

最佳答案

Dan 的解决方案是错误的,而 Ismail 的解决方案不完整。

  1. __str__() 未被调用,__repr__() 被调用。
  2. __repr__() 应该像 pformat 一样返回一个字符串。
  3. 打印通常只缩进 1 个字符并尝试节省行数。如果您想弄清楚结构,请将宽度设置得低一些,缩进设置得高一些。

举个例子

class S:
def __repr__(self):
from pprint import pformat
return pformat(vars(self), indent=4, width=1)

a = S()
a.b = 'bee'
a.c = {'cats': ['blacky', 'tiger'], 'dogs': ['rex', 'king'] }
a.d = S()
a.d.more_c = a.c

print(a)

这打印

{   'b': 'bee',
'c': { 'cats': [ 'blacky',
'tiger'],
'dogs': [ 'rex',
'king']},
'd': { 'more_c': { 'cats': [ 'blacky',
'tiger'],
'dogs': [ 'rex',
'king']}}}

虽然不完美,但还过得去。

关于python - 如何使用 pprint 使用内置的 __str__(self) 方法打印对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9135485/

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