蟒蛇的多个参数调度
chatora.dispatch的Python项目详细描述
chatora.dispatch
为python分派多参数。
用法
将函数转换为调度泛型函数,如functools.singledispatch。 与functools.singledispatch不同,它支持多分派。
fromchatora.dispatch.apiimportdispatch@dispatchdeffunc(arg0,arg1):return'1st func'assertfunc(0,0)=='1st func'assertfunc('0','0')=='1st func'@func.registerdef_(arg0,arg1:int):return'2nd func'assertfunc(0,0)=='2nd func'assertfunc('0',0)=='2nd func'assertfunc('0','0')=='1st func'@func.registerdef_(arg0:int,arg1:int):return'3rd func'assertfunc(0,0)=='3rd func'assertfunc('0',0)=='2nd func'assertfunc('0','0')=='1st func'
它部分支持typing.union、typing.optioanl和typing.any的参数。 键入.any等同于空批注。
fromchatora.dispatch.apiimportdispatchimporttyping@dispatchdeffunc(arg0:typing.Any,arg1:typing.Any):return'1st func'@func.registerdef_(arg0:typing.Optional[str],arg1:typing.Union[str,list,tuple]):return'2nd func'assertfunc(0,0)=='1st func'assertfunc('0',0)=='1st func'assertfunc('0','0')=='2nd func'assertfunc('0',[])=='2nd func'assertfunc(None,())=='2nd func'
它还部分支持返回类型注释。
fromchatora.dispatch.apiimportdispatchimporttypingclassResultTuple(tuple):def__new__(cls,*args):returnsuper().__new__(cls,args)classResultClass:def__init__(self,a,b):self.a,self.b=a,b@dispatchdeffunc(arg0:typing.Optional[str],arg1:tuple):return'1st func'@func.registerdef_(arg0:typing.Optional[str],arg1:tuple)->typing.Sequence[str]:return['2nd','func']@func.registerdef_(arg0:typing.Optional[str],arg1:tuple)->typing.Tuple[str]:return('3rd','func')@func.registerdef_(arg0:typing.Optional[str],arg1:tuple)->ResultTuple:returnResultTuple('4th','func')@func.registerdef_(arg0:typing.Optional[str],arg1:tuple)->ResultClass:returnResultClass('4th','func')assertfunc('0',())=='1st func'assertfunc('0',(),_return_type=typing.Sequence[str])==['2nd','func']assertfunc('0',(),_return_type=typing.Tuple[str])==('3rd','func')assertfunc('0',(),_return_type=ResultTuple)==ResultTuple('4th','func')assertisinstance(func('0',(),_return_type=ResultClass),ResultClass)
更改日志
0.1(2019-05-01)
- 出生!