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
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/18373546