私はインタプリタでいくつかのコードをテストしていましたが、sqlite3.Row
クラスの予期しない動作に気付きました。私が思うオブジェクトを印刷すると、str()とrepr()のどちらとも異なる出力が得られますか?
>>> 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>
:
私の理解では、print obj
が常にprint str(obj)
と同じ結果を得るだろう、とインタプリタにobj
を入力するとprint repr(obj)
と同じ結果を得るだろうということでしたが、これはsqlite3.Row
のためのケースではありませんsqlite3.Row
はtuple
のサブクラスでなければなりませんが、この現象を引き起こす可能性があるシーンの背後には何が起こっているのかはまだ分かりません。誰もこれを説明できますか?
これはPython 2.5.1でテストされましたが、動作が他のPythonバージョンと同じかどうかは不明です。
これが重要かどうかはわかりませんが、のrow_factory
属性はsqlite3.Row
に設定されています。
投稿する前にhttp://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-pythonを見ましたか? – ktdrv
@kaloyan - あなたが私にそれを指摘することができれば、私は私の質問に答える何も見つけることができません。 –
興味深い行動。 'sqlite3.Row'はtupleをサブクラス化していないようですので、継承よりもいくつかの基準に基づいてprint文の特殊ケースリストやタプルを推測していますが、これを説明することははるかに少ない。 – millimoose