Python 多方法联合类型don';不能正确地支持重载

Python 多方法联合类型don';不能正确地支持重载,python,multimethod,Python,Multimethod,我正在使用multimethod包(1.4)来重载方法。我需要使用联合类型(或TypeVar)作为输入类型;然而,这引起了一个问题。例如: from typing import Union from multimethod import multimethod @multimethod def func(x: int): print(x) @multimethod def func(x: int, y: int): print(x, y) func(1) func(2,

我正在使用
multimethod
包(1.4)来重载方法。我需要使用联合类型(或TypeVar)作为输入类型;然而,这引起了一个问题。例如:

from typing import Union
from multimethod import multimethod


@multimethod
def func(x: int):
    print(x)

@multimethod
def func(x: int, y: int):
    print(x, y)

func(1)
func(2, 3)
这可以很好地工作,并且输出

1
2 3
正如所料。但是,此代码崩溃:

from typing import Union
from multimethod import multimethod


@multimethod
def func(x: int):
    print(x)

@multimethod
def func(x: Union[int, float], y: int):
    print(x, y)

func(1)
func(2, 3)
输出:

1
Traceback (most recent call last):
  File "C:\Users\...\testing.py", line 14, in <module>
    func(2, 3)
  File "C:\Users\...\.conda\envs\...\lib\site-packages\multimethod\__init__.py", line 184, in __call__
    return self[tuple(map(self.get_type, args))](*args, **kwargs)
TypeError: func() takes 1 positional argument but 2 were given
1
回溯(最近一次呼叫最后一次):
文件“C:\Users\…\testing.py”,第14行,在
func(2,3)
文件“C:\Users\…\.conda\envs\…\lib\site packages\multimethod\\uuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu__
返回self[tuple(map(self.get_type,args))](*args,**kwargs)
TypeError:func()接受1个位置参数,但给出了2个

有没有一种方法可以使用联合类型和不同数量的参数?谢谢

为什么不使用*args@OmarEhab,
*args
与任何事情有什么关系?当您不知道有多少个参数时,您的函数会将put only*args作为一个参数,它会给您一个所有参数的列表,请检查此@UlrichEckhardt是的,但这只是一个MRE。实际函数有4个或5个参数,每个可以是12种类型,因此将导致48个方法签名,这显然是不好的:)OmarEhab,这是正确的,但是多方法< /Cord>包使用了不同的方法(类似于C++重载)。它试图避免变量参数或关键字参数的几个缺点。使用这些方法更像是一种变通方法,而不是一种解决方案。也就是说,如果我猜对了OP想要做什么。