我们说我有很多接受某种格式输入的函数。
让我们说我想向我的模块的用户提供用另一种格式的输入调用这些函数的选项。转换很容易。
我不想在每个单独的功能中进行转换,我觉得只是对我的功能进行复制粘贴然后手动插入转换是不好的做法。
我也觉得我不必手动转到每个函数并将其更改为* args和** kwargs签名,并插入大量的样板代码,其中包含"如果您有一个kwargs就是这样,做到这一点,如果是这样,做这个"。
这种事情的好方法是什么?动态函数生成加装饰器?还有其他什么呢?
答案 0 :(得分:2)
You still have to define what to do for each function for different overload of the arguments. At least for sake of definition which signature is overloaded which is not. See code below. foo is overloaded and UnchangedFoo is not.
Here is example what you can do inspired by Guido van van Rossum
from mm import multimethod
@multimethod(int)
def foo(i):
...code for int...
@multimethod(list):
def foo(List):
for i in List:
foo(i)
def UnchangedFoo(i):
...some code...