Tôi đã thử nghiệm một số mã trên trình thông dịch và tôi nhận thấy một số hành vi không mong muốn đối với lớp học sqlite3.Row
.Làm cách nào để in kết quả đối tượng ở đầu ra khác với cả str() và repr()?
sự hiểu biết của tôi là print obj
sẽ luôn luôn nhận được kết quả tương tự như print str(obj)
, và gõ obj
thành người phiên dịch sẽ nhận được kết quả tương tự như print repr(obj)
, tuy nhiên đây không phải là trường hợp cho sqlite3.Row
:
>>> print row # the row object prints like a tuple
(u'string',)
>>> print str(row) # why wouldn't this match the output from above?
<sqlite3.Row object at 0xa19a450>
>>> row # usually this would be the repr for an object
(u'string',)
>>> print repr(row) # but repr(row) is something different as well!
<sqlite3.Row object at 0xa19a450>
Tôi nghĩ sqlite3.Row
phải là một phân lớp của tuple
, nhưng tôi vẫn không hiểu chính xác những gì đang diễn ra đằng sau hậu trường có thể gây ra hành vi này. Bất cứ ai có thể giải thích điều này?
Điều này đã được thử nghiệm trên Python 2.5.1, không chắc chắn liệu hành vi có giống nhau đối với các phiên bản Python khác hay không.
Không chắc chắn điều này có quan trọng hay không, nhưng thuộc tính row_factory
cho số Connection
của tôi được đặt thành sqlite3.Row
.
Bạn đã xem http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python trước khi đăng? – ktdrv
@ kaloyan - Tôi không thể tìm thấy bất kỳ điều gì có câu trả lời cho câu hỏi của tôi, nếu bạn có thể vui lòng chỉ cho tôi. –
Hành vi thú vị. 'sqlite3.Row' dường như không phân lớp tuple, vì vậy tôi đoán là danh sách các trường hợp đặc biệt và/hoặc tuple in dựa trên một số tiêu chí khác so với thừa kế, nhưng tôi không thể tìm thấy bất kỳ điều gì trong tài liệu sẽ thừa nhận, ít giải thích điều này. – millimoose