我正在使用 python3.8 和multipledispatch库来重载方法签名。
multipledispatch 文档示例建议像这样重载:
from multipledispatch import dispatch
@dispatch(int, int)
def add(x, y):
print(x + y)
@dispatch(str, str)
def add(x, y):
print(f'{x} {y}')
add(1, 2)
add('hello', 'world')
但在我的情况下,我想用这样的关键字参数调用 add :
add(x=1, y=2)
add(x='hello', y='world')
我还想将它与这样的默认值一起使用:
from multipledispatch import dispatch
@dispatch(int, int)
def add(x=2, y=1):
print(x + y)
@dispatch(str, str)
def add(x='hello', y='world'):
print(f'{x} {y}')
add(x=1)
add(y='world')
当尝试以这种方式使用它时,调度装饰器会忽略 kwargs 并抛出以下异常:
Traceback (most recent call last):
File "/home/tomer/.virtualenvs/sqa/lib/python3.8/site-packages/multipledispatch/dispatcher.py", line 269, in __call__
func = self._cache[types]
KeyError: ()
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/tomer/windows-automation-testing/sqa/try.py", line 22, in <module>
add(x=1, y=2)
File "/home/tomer/.virtualenvs/sqa/lib/python3.8/site-packages/multipledispatch/dispatcher.py", line 273, in __call__
raise NotImplementedError(
NotImplementedError: Could not find signature for add: <>