может кто-нибудь просветить меня по разнице между print sth
и print str(sth)
?python print vs __str__?
E.g. в примере из official documentation for sqlite3, можно в настоящее время увидеть следующий код, который создает базу данных, а затем использует класс фабрики, чтобы обернуть данные, извлеченные оттуда:
(1) Создание базы данных:
# 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) Теперь, используя завод по производству некоторых объектов:
>>> 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)
Как вы видите, мы можем ввести r
или print r
, чтобы получить это милое представление объекта строки.
Но что не было показано выше, это то, что print str(r)
даст вам что-то другое - что-то больше похоже:
<sqlite3.Row object at 0x7f4e7dd8abcd>
Так мне интересно, если кто-то хорошо знакомы с реализацией CPython может объяснить, что печать делает для получить такой вид представления от объекта, который не поддерживает __str__
?
Или я предполагаю, что альтернативный вопрос будет - в случае, когда приведенные выше выражения дают разные результаты - как я могу получить строку, эквивалентную той, которая была бы напечатана простым print obj
?
Возможный дубликат [Как печатая результат объекта в другом выходе, чем и ул() и магнезии()?] (HTTP: //stackoverflow.com/questions/7920284/how-can-printing-an-object-result-in-different-output-than-both-str-and-repr) –
Скопируйте свой ответ там, измените одну строку, чтобы избежать модераторов ответов модераторов, и давайте Закройте это :-) –