簡體   English   中英

Python-抽象類子類化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM