我希望我的
__new__
方法在某些情况下表现不同,并希望使用 singledispatchmethod
将其拆分为重载函数。
然而这不起作用,重载函数永远不会被调用。这是为什么?
from functools import singledispatchmethod
class Foo:
@singledispatchmethod
def __new__(cls, arg1, **kwargs):
return "default call"
@__new__.register(int)
def _(cls, arg1, **kwargs):
return "called with int " + str(arg1)
print(Foo("hi"))
# default call
print(Foo(1))
# default call
singledispatch
在第一个参数上调度,即两次调用中的 Foo
类。
对于方法,使用
singledispatchmethod
,它在第一个非 self 或非 cls 参数上调度。
参见 https://docs.python.org/3/library/functools.html#functools.singledispatchmethod