¿Cómo usar pprint para imprimir un objeto usando el método incorporado __str __ (self)?

Tengo un script de Python que procesa un archivo .txt que contiene información de uso de informes. Me gustaría encontrar una manera de imprimir limpiamente los atributos de un objeto usando la función pprint (vars (objeto)) de pprint.

El script lee el archivo y crea instancias de una clase de informe. Aquí está la clase.

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)))

Me gustaría poder imprimir instancias de Report limpiamente a-la-pprint.

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

Cuando llamo

print record

para una sola instancia de Informe, esto es lo que obtengo en el shell.

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

Mi pregunta es doble.

Primero, ¿es esta una forma buena / deseada de imprimir los atributos de un objeto limpiamente? ¿Hay una mejor manera de hacer esto con o sin pprint?

Segundo, ¿por qué

None

print al shell al final? Estoy confundido de dónde viene eso.

Gracias por cualquier consejo.

Respuestas a la pregunta(10)

Su respuesta a la pregunta