Python中的@functools.singledispatch可以实现类似多态的效果。比如:
@singledispatch
def add(a, b):
return a + b
@add.register(int)
def _(a, b):
return a + b
@add.register(str)
def _(a, b):
return a + " | " + b
@add.register(list)
def _(a, b):
return a + b + ["end"]
调用add时, 传入的类型不同, 调用的方法也不一样
add(1, 2)
3
add('1', '2')
1 | 2
add(['1'], ['2'])
['1', '2', 'end']
其中下划线_函数命名方式并没有什么问题, 因为它是 @add.register(list) 这个"函数"的入参, 叫什么名字并不重要。