私は、ファイルの低レベルデータ、つまりマッピングなどを読み取り、python の組み込み sqlite API を使用して結果を sqlite DB に保存できる小さなツールに取り組んでいます。
解析されたファイル データには、次の 3 つのクラスがあります。
class GenericFile: # general file class
# bunch of methods here
...
class SomeFileObject_A: # low level class for storing objects of kind SomeFileObject_A
# bunch of methods here
...
class SomeFileObject_B: # low level cass for storing objects of kind SomeFileObject_A
# bunch of methods here
...
sqlite インターフェイスは別のクラスとして実装されています。
class Database:
def insert(self, object_to_insert):
...
def _insert_generic_file_object(self, object_to_insert):
...
def _insert_file_object_a(self, object_to_insert):
...
def _insert_file_object_b(self, object_to_insert):
...
# bunch of sqlite related methods
オブジェクトをDBに挿入する必要があるときは、db.insert(object)
.
isinstance
メソッドで使用することをお勧めしますinsert
。オブジェクトごとに適切なメソッドを明示的に呼び出す必要がなく、挿入されたオブジェクトを処理するためです。これはよりエレガントに見えます。しかし、 をさらに読んだ後isinstance
、私の設計はあまり良くないのではないかと疑い始めました。
ジェネリックinsert
メソッドの実装は次のとおりです。
class Database:
def insert(self, object_to_insert):
self._logger.info("inserting %s object", object_to_insert.__class__.__name__)
if isinstance(object_to_insert, GenericFile):
self._insert_generic_file_object(object_to_insert)
elif isinstance(object_to_insert, SomeFileObject_A):
self._insert_file_object_a(object_to_insert)
elif isinstance(object_to_insert, SomeFileObject_B):
self._insert_file_object_b(object_to_insert)
else:
self._logger.error("Insert Failed. Bad object type %s" % type(object_to_insert))
raise Exception
self._db_connection.commit()
したがって、isinstace
私の場合は避けるべきであり、そうする必要がある場合、ここでより良い解決策は何ですか?
ありがとう