单分派泛函数

  • 只要被 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判断语句, 且集合在一起代码显得臃肿不堪