为什么使用 singledispatchmethod 重载 __new__ 不起作用?

问题描述 投票:0回答:1

我希望我的

__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
python initialization functools single-dispatch
1个回答
0
投票

singledispatch
在第一个参数上调度,即两次调用中的
Foo
类。

对于方法,使用

singledispatchmethod
,它在第一个非 self 或非 cls 参数上调度。

参见 https://docs.python.org/3/library/functools.html#functools.singledispatchmethod

© www.soinside.com 2019 - 2024. All rights reserved.