Используйте блок with
для экземпляра , и тогда пользователь может иметь несколько вызовов, пока базовый файл открыт, при этом обеспечивая надлежащую очистку. Вы можете сделать это, сделав класс диспетчером контекста. Для удобства вы также можете предложить явный метод закрытия; следуйте соглашению и назовите его close
, а не __close__
(так как нет никакого специального метода dunder с таким именем).
Что-то вроде:
class Table:
def __init__(self, loc):
self.file = open(loc, "r+")
def insert(self, key, value):
self.file.write((key, value))
self.file.flush()
os.fsync()
def close(self):
self.file.close()
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
self.close()
Теперь вы можете что-то сделать например:
with Table('foo/bar/baz.db') as t:
for i, j in my_data:
t.insert(i, j)