在上一次的推送《Python 监控文件事件变化—以音乐高潮提取为例》中,最后继承 LoggingEventHandler 类,对 on_created 进行修改的时候,我使用了一个词叫:重载,随后不久我便意识到犯下了一个错误。
我们先来看看重载与重写的概念:
重载的条件如下:
1.一个类里面
2.方法名字相同
3.参数不同
而参数不同可分为:参数类型不同,参数个数不同。而上一次推送中,对on_created的修改并没有针对参数,我们只是单纯地对函数内容进行修改而已。因此只能叫 重写 。
条件如下:
1.参数列表与原函数一致。
2.返回类型与原函数一致。
因此,根据这个条件,Python中绝大部分的继承修改只能叫 重写 ,而不能叫 重载 。
Python其实不需要重载这个概念。为什么呢?重载主要是针对参数而言的,一个是改变参数的类型,一个是改变参数的个数。而Python不需要限定参数类型,又 可以接受可变参数,因此函数重载就显得非常鸡肋了。
不过我们依然能通过singledispatch
装饰器来实现重载,不过官方称这样的函数为泛型函数,官方文档:
https://docs.python.org/3/library/functools.html#functools.singledispatch
使用方法:
在需要被重载的函数上加上装饰器:
然后用register属性注册重载后的函数:
效果如下:
>>> fun(42, verbose=True)
Strengthin numbers, eh?42
>>> fun(['spam','spam','eggs','spam'], verbose=True)
Enumeratethis:
0 spam
1 spam
2 eggs
3 spam
看,这样我们就顺利完成了Python里的"重载",尽管大部分时候都不会用到这个功能。
全部0条评论
快来发表一下你的评论吧 !