私は、オブジェクトの__ enter __()と__ exit __()メソッドは、 'with'が使用されるたびに呼び出されることを読みました。私はユーザ定義のオブジェクトについては、あなた自身でこれらのメソッドを定義することができると理解していますが、 'open'やテストケースのような組み込みオブジェクト/関数に対してこれがどのように機能するのか分かりません。Pythonビルトインオブジェクトの__enter __()と__exit __()はどこで定義されていますか?
予想通り、このコードは動作し、私はそれが__終了__()でファイルを閉じ想定しています。しかし、
with open('output.txt', 'w') as f:
f.write('Hi there!')
または
with self.assertRaises(ValueError):
remove_driver(self.driver) # self refers to a class that inherits from the default unittest.TestCase
を、そのような__入力__()、または__終了__は(ありません私はそれを検査のいずれかのオブジェクト上の)方法:
「オープン」は「with」でどのように機能していますか?コンテキスト管理プロトコルをサポートするオブジェクトでは、__()を入力し、__ exit()メソッドを定義して検査可能にしてはいけませんか?
テキストを共有するためにスクリーンショットを使用しないでください。 – Elizafox
dir(open( '/ dev/null'))で '' __exit__ 'を試してください。 ' – robyschek
' open'はコンテキストマネージャプロトコルをサポートするオブジェクトではありません。その*戻り値*はそのプロトコルをサポートするオブジェクトです。 'assertRaises'と同様です。 – BrenBarn