元に戻す/やり直し機能があり、一時的に大量のデータを保存する必要があるクラスを設計しています。私は現在、クラスがガベージコレクションされたときにファイルを削除するためにdel演算子をオーバーロードすることによって「一時」ファイルを実装していますが、これを行うためのより良い方法があると信じなければなりません。tempfileモジュールを使用してみましたが、shelveモジュールがファイルオブジェクト(grr)ではなく名前を予期しているため、機能しません。
とにかく、誰かがこれを行うためのより良い方法があるかどうか疑問に思っていました。コードの重要な部分は以下のとおりです。
import os, shelve
from time import time
class DataHandlerUser(DataHandler):
def __init__(self, data):
# storing items
self.__unredofilename = os.path.dirname(__file__) + '/.undoredo' + str(time()) + '.pyworkbooks'
try:
os.remove(self.__unredofilename)
except OSError: pass
self._undoredoBuffer = shelve.open(self.__unredofilename)
# ... rest of init
def __del__(self):
# simple check to make sure not tampered with
if '.undoredo' not in self.__unredofilename or '.pyworkbooks' not in self.__unredofilename:
raise Exception('Critical Error: Internal filename for undo/redo operations tampered with')
try:
os.remove(self.__unredofilename)
except OSError: pass