Python 3.4添加了使用静态方法定义函数重载的能力。这基本上是文档中的示例:
from functools import singledispatch
class TestClass(object):
@singledispatch
def test_method(arg, verbose=False):
if verbose:
print("Let me just say,", end=" ")
print(arg)
@test_method.register(int)
def _(arg):
print("Strength in numbers, eh?", end=" ")
print(arg)
@test_method.register(list)
def _(arg):
print("Enumerate this:")
for i, elem in enumerate(arg):
print(i, elem)
if __name__ == '__main__':
TestClass.test_method(55555)
TestClass.test_method([33, 22, 11])
在最纯粹的形式中,singledispatch实现依赖于第一个参数来识别类型,因此很难将此功能扩展到实例方法。
有没有人对如何使用(或 jerry-rig)此功能使其与实例方法一起使用有任何建议吗?