Tôi có một tập lệnh Python xử lý tệp .txt chứa thông tin sử dụng báo cáo. Tôi muốn tìm một cách để in sạch các thuộc tính của một đối tượng bằng cách sử dụng pprint của pprint (vars (đối tượng)) chức năng.Cách sử dụng dấu in để in một đối tượng bằng phương thức __str __ (self) dựng sẵn?
Tập lệnh đọc tệp và tạo các phiên bản của lớp Báo cáo. Đây là lớp học.
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)))
Tôi muốn có thể in các phiên bản Báo cáo rõ ràng.
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
Khi tôi gọi
print record
cho một trường hợp duy nhất của Báo cáo, đây là những gì tôi nhận được trong vỏ.
{'date_added': '1/3/2012 14:06',
'price': '0',
'report': 'some_report',
'retail_price': '0.25',
'user': 'some_username'}
None
Câu hỏi của tôi là hai lần.
Đầu tiên, đây có phải là cách tốt/mong muốn để in các thuộc tính của đối tượng một cách sạch sẽ không? Có cách nào tốt hơn để làm điều này có hoặc không có dấu vân tay?
Thứ hai, tại sao
None
in vào vỏ lúc kết thúc? Tôi đang bối rối đến từ đâu.
Cảm ơn mọi mẹo.
mặt lưu ý trong __str__ khi bạn bao gồm từ pprint pprint nhập khẩu, nếu bạn chỉ sử dụng phương pháp này một hoặc hai lần đó là tốt, nhưng đối với một phương pháp thường được sử dụng mô-đun này sẽ được nhập (cường độ tính toán) mỗi khi phương thức được gọi. Tôi nghĩ tốt hơn là bạn nên nhập các mô-đun của mình ở trên cùng. Điều này cũng cải thiện hiệu suất tổng thể trong các kịch bản python. – lukecampbell
@lukecampbell - không đúng về các lần nhập tiếp theo được tính toán chuyên sâu. Khi bạn nhập khẩu, cơ chế sẽ xem xét một dict trong sys.modules để xem nó đã được tải chưa. Nếu có, không có gì khác được thực hiện. Chỉ khi nó không bao giờ được nhập khẩu thì cơ chế import có làm gì khác không. – bgporter
@bgporter: Nếu bạn tạo một đối tượng khác của đối tượng thì sao? –