在上一次的推送《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里的"重载",尽管大部分时候都不会用到这个功能。
-
参数
+关注
关注
11文章
1868浏览量
33761 -
函数
+关注
关注
3文章
4406浏览量
66850 -
python
+关注
关注
57文章
4858浏览量
89592
发布评论请先 登录
Python
函数重载隐藏覆盖的区别
漫谈java中重载与重写的不同
java构造函数重载定义
python基础教程之python是什么?概念解析

Python 重载与重写的概念
评论