[英]Python - Abstract class subclassing
我試圖找到最適合我的python庫用戶的方法,以實現我編寫的抽象類。 即,我的抽象類定義了一個API以訪問存儲在數據庫中的特定值,但是我想讓用戶選擇如何存儲它(簡單的文本文件,json,sqlite等)。
我的問題是,我應該如何檢索用戶創建的類並在我的庫中使用它?
這是我想出的解決方案,但是我覺得它不是很優雅,想知道是否還有更多的pythonic方式。
在我的圖書館中:
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]
在用戶代碼中
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
當然,如果沒有定義子類,我將返回比IndexError
更好的錯誤,但是您知道了。
先感謝您 !
正如Blorgbeard建議的那樣,我終於解決了其他問題
_databases = {}
def register(dbname="default"):
def wrapper(klass):
_databases[dbname] = klass
return klass
return wrapper
def get_db(name="default"):
return _databases[name]
而用戶只需要聲明
@register()
class SqliteDatabase:
def __get__(self, index):
# retrieve data
if data is None:
raise KeyError(index)
return data
這樣,任何人都可以根據需要聲明盡可能多的數據庫。 如果您對此版本有改進,我會很樂意接受。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.