python 接口实现类的

定义接口实现

class ObjectAuth(ABC):
    @staticmethod
    def dispatch(type):
        for sub_cls in ObjectAuth.__subclasses__():
            if sub_cls.__name__.lower().find(type.lower()) >= 0:
                return sub_cls
        raise Exception("没有合适的ObjectAuth类进行分配")

    @abstractmethod
    def gen_temp_access_key(self, bucket, resource):
        raise NotImplementedError()

具体实现

class OOSAuth(ObjectAuth):
    def __init__(self, remote_config) -> None:
        self.read_only_ak = remote_config.get('read_only_ak')
        self.read_only_sk = remote_config.get('read_only_sk')

    def gen_temp_access_key(self, bucket, resource):
        return self.read_only_ak, self.read_only_sk, ''

使用实现类方式

auth = ObjectAuth.dispatch(type)(file_uploader_config)
auth.gen_temp_access_key(bucket, resource)

不使用接口

class ModelProxy(object):
    """
    只获取数据,是否应该获取数据有业务逻辑判断
    """

    _META_MODEL = None
    _DEFAULT_TIME_FIELD = "dateTimeAdded"

    @staticmethod
    def dispatch(subclass, *args, **kwargs):
        for sub_cls in ModelProxy.__subclasses__():
            if sub_cls._META_MODEL and sub_cls._META_MODEL.__name__.lower() == subclass.lower():
                return sub_cls

        raise Exception(u"没有合适的ModelProxy类进行分配")

python ABC

from abc import ABCMeta, abstractmethod

class MyClass(object):
    __metaclass__ = ABCMeta
    
    @abstractmethod
    def my_method(self):
        pass

posted @ 2024-08-22 11:45  vx_guanchaoguo0  阅读(6)  评论(0编辑  收藏  举报