Tengo un script de Python que procesa un archivo .txt que contiene información de uso del informe. Me gustaría encontrar una manera de imprimir limpiamente los atributos de un objeto utilizando la función pprint (vars (objeto)) de pprint.Cómo usar pprint para imprimir un objeto usando el método __str __ (self) incorporado?
El script lee el archivo y crea instancias de una clase Report. 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 Reportar 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 del informe, esto es lo que me pasa en la cáscara.
{'date_added': '1/3/2012 14:06',
'price': '0',
'report': 'some_report',
'retail_price': '0.25',
'user': 'some_username'}
None
Mi pregunta es doble.
En primer lugar, ¿es esta una forma buena/deseada de imprimir los atributos de un objeto limpiamente? ¿Hay una mejor manera de hacerlo con o sin impresión?
En segundo lugar, ¿por qué
None
de impresión a la concha al final? Estoy confundido de dónde viene eso.
Gracias por cualquier consejo.
nota al margen en __str__ cuando se incluye a partir pprint importación pprint, si sólo está utilizando este método una o dos veces, está bien, pero para un método comúnmente utilizado este módulo se importará (de manera computacionalmente intensa) cada vez que se llame al método. Creo que sería mejor tener tus módulos importados en la parte superior. También esto mejora el rendimiento general en las secuencias de comandos de Python. – lukecampbell
@lukecampbell: no es cierto que las importaciones posteriores sean computacionalmente intensivas. Cuando importa, el mecanismo se ve en un dict en sys.modules para ver si ya está cargado. Si es así, no se hace nada más. Solo si nunca se ha importado, el mecanismo de importación hace otra cosa. – bgporter
@bgporter: ¿Qué sucede si crea otra instancia del objeto? –