文章标题的参考文章: Python 优雅地 dumps 非标准类型
今天主要学习的是里面的知识点singledispatch
。
在Java语言中我们知道是有方法重载的(同一个方法名,参数不同或顺序不同导致),但是在Python中是没有方法重载这么一说的。不过在Python中我们可以使用singledispatch
装饰器将一个普通函数变为泛函数(generic function)。
如果我们想针对不同类型的参数进行不同的处理,并且不想将他们放到同一个函数中,我们就可以使用singledispatch
装饰器。
1 | In [1]: from functools import singledispatch |
singledispatch
机制一个显著特征是,可以在系统的任何地方和任何模块中注册专门的函数。如果后来模块中增加了新的类型,可以直接添加一个新的专门用来处理新类型的函数。
参考文章: Python - lru_cache和singledispatch装饰器
有了上面的知识后我们再看下这篇文章的题目,
1 | In [13]: import json |
我们看另一种写法
1 | # json字符串输出时,浮点数字错误处理函数 |
相比于上面的写法使用singledispatch
更符合设计模式的规范。假如以后有了新的类型,不用再修改ExtendJSONEncoder
类,只需要添加适当的 singledispatch
方法就可以了, 比较pythonic
。
其他学习singledispatch
的参考文章: