单分派泛函数
- 只要被 singledispatch 装饰的函数 就是一个单分派的
single-dispatch
的泛函数 generic functions
- @singledispatch 用来标记需要处理不同类型数据的基函数
- 单分派: 根据一个参数的类型, 以不同方式执行相同的操作的行为
- 多分派: 可根据多个参数的类型选择专门的函数的行为
- 泛函数: 多个函数绑在一起组合成一个泛函数
from functools import singledispatch
class Bar: ...
@singledispatch
def say(flag):
print('{}, 不合法, 请输入合法的参数'.format(flag))
@say.register(int)
def _(age):
print('我已经 {} 岁了'.format(age))
@say.register(str)
def _(name):
print('我叫 "{}"'.format(name))
@say.register(Bar)
def _(obj):
print('我是自定义类型: Bar')
if __name__ == '__main__':
say(18)
say('李狗蛋')
say([1, 2, 3])
bar = Bar()
say(bar)
# 如果不使用这种方法的话, 可能我们需要很多if判断语句, 且集合在一起代码显得臃肿不堪