私が書いた抽象クラスを実装するために、私のPythonライブラリのユーザーにとって最善を尽くそうとしています。 つまり、私の抽象クラスは、データベースに格納された特定の値にアクセスするためのAPIを定義しますが、ユーザーに保存方法(単純なテキストファイル、json、sqliteなど)を選択させたいとします。Python - 抽象クラスのサブクラス化
ユーザーが作成したクラスをライブラリから取得する方法はありますか。
これは私が思いついた解決策ですが、私はそれは非常に優雅ではないと思うし、より無作法な方法があるのだろうかと思います。マイライブラリに
:ユーザーコードもちろん
class SqliteDatabase(Database):
def get(self, index):
# sqlite SELECT and such
return data
def insert(self, data):
# sqlite INSERT INTO
# return data with index provided
return data
で
from abc import ABC, abstractmethod
class Database(ABC):
@abstractmethod
def get(self, index):
pass
@abstractmethod
def insert(self, data):
pass
def get_database():
"""call this anywhere I need a concrete database class"""
return Database.__subclasses__()[-1]
、定義されたサブクラスが存在しない場合、私はIndexError
よりも優れたエラーを返しますが、あなたのアイデアを得ます。
ありがとうございます!私は最終的に何か他のもののために定住
少し詳しく説明できますか?問題はどこだ? – James
なぜあなたはそのようなクラスを取得していますか?クライアントがそのサブクラスのインスタンスを渡すべきではありませんか? – Blorgbeard
@Jamesそれ自体は問題ありません。すべてが現在の状態で動作します。私は、これを行うより良い方法があるかどうかを知りたいだけです。 – galactics