在上一次的推送《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里的"重载",尽管大部分时候都不会用到这个功能。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实
发表于 04-14 10:15
`1.1 覆盖隐藏重载重载,隐藏(重定义),覆盖(重写)—这几个名词看着好像很像,不过其实一样都不一样!!1.1.1 重载:(1)概念:在同一个作用域内;函数名相同,参数列表不同(参数
发表于 05-11 09:33
首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。 重载Overloading是一个类中
发表于 09-26 17:56
•0次下载
方法重写 1、重写只能出现在继承关系之中。当一个类继承它的父类方法时,都有机会重写该父类的方法。一个特例是父类的方法被标识为final。重写的主要优点是能够定义某个子类型特有的行为
发表于 09-27 11:40
•0次下载
Python,是一种面向对象的解释型计算机程序设计语言Python基础教程本书包括Python程序设计的方方面面,首先从Python的安装开始,随后介绍了
发表于 11-30 10:33
•2262次阅读
重载 overloading 1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载是一个类中多态性的一种表现。 2) Java的方法
发表于 12-08 10:38
•1256次阅读
Python 是一种解释型,面向对象的高级编程语言。和别的一些使用标点符号的语言不同,Python使用了大量的英语单词作为关键字,因而具有很好的可读性。而且跟其他编程语言相比,它有更少的语法结构。本文总结25个python相关的
发表于 12-28 17:57
•6560次阅读
在C++中我们经常会遇见“重载、重定义、重写”的概念,三个概念名字很像,很容易混淆,今天我们对三者进行一个区分。
发表于 06-29 11:33
•5538次阅读
复数的概念可以通过自定义类实现;复数中的运算操作可以通过操作符重载实现;赋值操作符只能通过成员函数实现;操作符重载的本质为函数定义。
发表于 12-24 16:26
•562次阅读
重载连接器是在特殊的环境下使用的,所以在设计重载连接器的时候会根据相应的条件进行设计,而且重载连接器应用在很多领域,那么重载连接器有哪些优势呢? 下面我们一起来看看吧!
发表于 06-30 15:53
•1819次阅读
重载连接器定义及作用_重载连接器接线方法
发表于 09-19 15:46
•5817次阅读
python模块都有个内置属性**name**。
发表于 02-21 10:33
•653次阅读
python通过reload重载模块动态更新最新代码。
## 1.1 reload
发表于 02-21 11:16
•517次阅读
于各种编程场景,从简单的数据处理到复杂的数据结构和算法。本文将介绍Python列表的基本概念、常用操作以及一些实际应用。
发表于 04-16 10:42
•1679次阅读
Java中的重载(Overload)和重写(Override)是两个重要的面向对象编程概念,尽管它们在使用和功能上有所不同,但它们都与方法和多态性相关。本文将全面介绍重载和
发表于 11-17 17:13
•630次阅读
评论