Testowałem kod na interpretera i zauważyłem pewne nieoczekiwane zachowanie dla klasy sqlite3.Row
.W jaki sposób drukowanie obiektu może mieć inne wyniki niż zarówno str(), jak i repr()?
Moje zrozumienie, że print obj
będzie zawsze taki sam wynik jak print str(obj)
i wpisując obj
do tłumacza dostanie taki sam wynik jak print repr(obj)
, jednak nie jest to sprawa dla 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>
myślę sqlite3.Row
musi być podklasą tuple
, ale nadal nie rozumiem dokładnie, co dzieje się za kulisami, które mogłyby spowodować to zachowanie. Czy ktoś może to wyjaśnić?
Zostało to przetestowane na Pythonie 2.5.1, nie jest pewne, czy zachowanie jest takie samo dla innych wersji Pythona.
Nie jestem pewien, czy to ma znaczenie, ale atrybut row_factory
dla mojego Connection
został ustawiony na sqlite3.Row
.
Czy obejrzałeś http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python przed opublikowaniem? – ktdrv
@kaloyan - Nie mogę znaleźć niczego, co by odpowiadało na moje pytanie, jeśli możesz wskazać mi to. –
Interesujące zachowanie. 'sqlite3.Row' nie wydaje się podklasą krotki, więc przypuszczam, że jest to lista wyjątków i/lub krotek ze względu na inne kryteria niż dziedziczenie, ale nie mogę znaleźć niczego w dokumentacji, która by przyznała, znacznie mniej wyjaśnić to. – millimoose