2016-03-30 9 views
0

私は、作成中の一時ファイルを作成するクラスを持っています。私は、一時ファイルを作成することは、元の問題に対する理想的な解決策ではないかもしれないが、変更することはできないと考えていることにご留意ください。それと並行して、コードはプログラムのコース全体で複数回実行されます。Pythonでcloseに必要な動作を行う場所

ファイルを削除する最も理想的な場所はどれですか?

オプション1:

import sys 
import os 

class Foo: 
    def __init__(self): 
     self.file = open("temp.txt", 'wb') 

    def do_something(self): 
     # ... 

    def close(self): 
     self.file.close() 
     os.remove("temp.txt") 
while True: 
    foo = Foo() 

    foo.do_something() 
    foo.close() 

オプション2:私は必要なアクションを置くことは悪い習慣です聞いたので、私はオプション2を使用するために躊躇してい

import sys 
import os 

class Foo: 
    def __init__(self): 
     self.file = open("temp.txt", 'wb') 

    def do_something(self): 
     # ... 

    def __del__(self): 
     self.file.close() 
     os.remove("temp.txt") 
while True: 
    with Foo() as foo: 
     foo.do_something() 

デストラクタで。しかし、オプション2は私にはもっと読みやすいようです。あなただけのプログラムが閉じたときに、ファイルがなくなっていることを確認する必要がある場合は

答えて

1

は、その後、あなたはatexitモジュールを使用する必要があります。他の例では、あなたは常にcontext managerでなければなりませんthis article.

+0

ところで、私はメインの投稿を更新して、コードを削除する前にファイルを削除しなければならないことを反映しました。 –

+0

ああ、私はあなたが声明で使っているのを気付かず、おっとしています。 – Natecat

1

あなたのクラスで概説した理由により、オプション1を使用する必要がありますし、__exit__方法でファイルの削除を置く必要があります。 withステートメントを既に使用しています。要求された__enter____exit__のメソッドがないため、定義したクラスはそのクラスでは機能しません。

関連する問題