ai có thể khai sáng cho tôi về sự khác biệt giữa print sth
và print str(sth)
?in trăn vs __str__?
Ví dụ: trong ví dụ từ official documentation for sqlite3, một hiện có thể nhìn thấy đoạn mã sau đó tạo ra một cơ sở dữ liệu và sau đó sử dụng một lớp nhà máy để quấn dữ liệu được chiết xuất từ đó:
(1) Tạo một cơ sở dữ liệu:
# I am using CPython 2.7, but I suppose 2.6 will be Ok as well
import sqlite3
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.execute('''create table stocks
(date text, trans text, symbol text, qty real, price real)''')
c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")
conn.commit()
c.close()
(2) Bây giờ sử dụng máy để sản xuất một số đối tượng:
>>> conn.row_factory = sqlite3.Row
>>> c = conn.cursor()
>>> c.execute('select * from stocks')
<sqlite3.Cursor object at 0x7f4e7dd8fa80>
>>> r = c.fetchone()
>>> type(r)
<type 'sqlite3.Row'>
>>> r
(u'2006-01-05', u'BUY', u'RHAT', 100.0, 35.14)
Như bạn thấy, chúng ta có thể gõ r
, hoặc print r
để có được đại diện tốt đẹp của các đối tượng liên tiếp.
Nhưng những gì không được hiển thị ở trên, nó là print str(r)
sẽ cung cấp cho bạn một cái gì đó khác nhau - một cái gì đó giống như:
<sqlite3.Row object at 0x7f4e7dd8abcd>
Vì vậy, tôi tự hỏi, nếu một người nào đó nổi làm quen với thực hiện CPython có thể giải thích những gì in không đến có được loại đại diện này từ một đối tượng không hỗ trợ __str__
? Hoặc tôi đoán một câu hỏi khác sẽ là - trong trường hợp các biểu thức trên cho kết quả khác nhau - làm cách nào tôi có thể nhận được một chuỗi tương đương với một chuỗi được in đơn giản print obj
?
có thể trùng lặp của [Làm thế nào có thể in một kết quả đối tượng trong đầu ra khác nhau hơn cả str() và repr()?] (Http: //stackoverflow.com/questions/7920284/how-can-printing-an-object-result-in-different-output-than-both-str-and-repr) –
Sao chép câu trả lời của bạn ở đó, sửa đổi một dòng để tránh người kiểm duyệt câu trả lời song song và chúng ta hãy đóng này :-) –