2

開いたファイルオブジェクトfileを取得して、次のようにデータを書き込む関数があります。

def Write(self, file):
    file.write("Data")

ここで、その関数をテストしたいと思います。ファイルにデータを書き込まないある種のストリームを使用してテストするのが適切だと思いました。StringIOクラス以外の仕事をするPython2.7クラスが見つかりませんでした。ただし、Python2.7では、このクラスはwrite関数にUnicode文字列を想定しています。そのため、クラスで関数を(file.write(u"Data"))テストすることはできません。 回避策として、小さなダミークラスを作成しましたWriteStringIO

class MyStream(object):
    S = property(lambda self: self._S)

    def __init__(self):
        self._S = ""

    def write(self, s):
        self._S += s

Writeこれで、関数を正常にテストできるようになりました。

私の質問:
同じトリックを行うネイティブPythonクラスはありますか?
提案のために事前に
Thxよろしくウォルタン

4

1 に答える 1

1

io州の文書として:

このモジュールは主にPython3.x用に設計されているため、このドキュメントでの「バイト」の使用はすべてstrタイプ(バイトはエイリアス)を指し、「テキスト」のすべての使用は参照することに注意する必要があります。ユニコードタイプに。さらに、これら2つのタイプはioAPIでは互換性がありません。

つまり、バックポートされたPython 3 IOライブラリを使用する場合は、Unicodeを使用する必要があります。ただし、元のStringIOクラス(バイト(Python 2文字列)テキストを考慮してそれらを受け入れる)はPython 2.7にまだ存在し、バックポートされていないだけioです。代わりに、とも呼ばれる独自のモジュールがありますStringIO

于 2011-05-31T14:37:13.633 に答える