0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python 重载与重写的概念

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-03 15:13 次阅读

在上一次的推送《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属性注册重载后的函数:

图片

效果如下:

  1. >>> fun(42, verbose=True)

  2. Strengthin numbers, eh?42

  3. >>> fun(['spam','spam','eggs','spam'], verbose=True)

  4. Enumeratethis:

  5. 0 spam

  6. 1 spam

  7. 2 eggs

  8. 3 spam

看,这样我们就顺利完成了Python里的"重载",尽管大部分时候都不会用到这个功能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 参数
    +关注

    关注

    11

    文章

    1779

    浏览量

    32078
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62413
  • python
    +关注

    关注

    55

    文章

    4779

    浏览量

    84440
收藏 人收藏

    评论

    相关推荐

    Python

    的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实
    发表于 04-14 10:15

    函数重载隐藏覆盖的区别

    `1.1 覆盖隐藏重载重载,隐藏(重定义),覆盖(重写)—这几个名词看着好像很像,不过其实一样都不一样!!1.1.1 重载:(1)概念:在同一个作用域内;函数名相同,参数列表不同(参数
    发表于 05-11 09:33

    漫谈java中重载重写的不同

    首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。 重载Overloading是一个类中
    发表于 09-26 17:56 0次下载

    java构造函数重载定义

    方法重写 1、重写只能出现在继承关系之中。当一个类继承它的父类方法时,都有机会重写该父类的方法。一个特例是父类的方法被标识为final。重写的主要优点是能够定义某个子类型特有的行为
    发表于 09-27 11:40 0次下载

    python基础教程之python是什么?概念解析

    Python,是一种面向对象的解释型计算机程序设计语言Python基础教程本书包括Python程序设计的方方面面,首先从Python的安装开始,随后介绍了
    发表于 11-30 10:33 2262次阅读
    <b class='flag-5'>python</b>基础教程之<b class='flag-5'>python</b>是什么?<b class='flag-5'>概念</b>解析

    Java中重载重写的区别及范例详解

    重载 overloading 1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载是一个类中多态性的一种表现。 2) Java的方法
    发表于 12-08 10:38 1256次阅读

    总结25个python相关的基础概念

    Python 是一种解释型,面向对象的高级编程语言。和别的一些使用标点符号的语言不同,Python使用了大量的英语单词作为关键字,因而具有很好的可读性。而且跟其他编程语言相比,它有更少的语法结构。本文总结25个python相关的
    的头像 发表于 12-28 17:57 6560次阅读

    C++:重载、重定义和重写概念和区分

    在C++中我们经常会遇见“重载、重定义、重写”的概念,三个概念名字很像,很容易混淆,今天我们对三者进行一个区分。
    的头像 发表于 06-29 11:33 5538次阅读

    C++之操作重载符学习的总结(二)

    复数的概念可以通过自定义类实现;复数中的运算操作可以通过操作符重载实现;赋值操作符只能通过成员函数实现;操作符重载的本质为函数定义。
    的头像 发表于 12-24 16:26 562次阅读

    重载连接器的优势是什么

    重载连接器是在特殊的环境下使用的,所以在设计重载连接器的时候会根据相应的条件进行设计,而且重载连接器应用在很多领域,那么重载连接器有哪些优势呢? 下面我们一起来看看吧!
    的头像 发表于 06-30 15:53 1819次阅读

    如何接线重载连接器

    重载连接器定义及作用_重载连接器接线方法
    的头像 发表于 09-19 15:46 5817次阅读

    python重载运算符init和str介绍

    python模块都有个内置属性**name**。
    的头像 发表于 02-21 10:33 653次阅读

    python中间模块重载介绍

    python通过reload重载模块动态更新最新代码。 ## 1.1 reload
    的头像 发表于 02-21 11:16 517次阅读

    Python列表的基本概念、常用操作及实际应用

    于各种编程场景,从简单的数据处理到复杂的数据结构和算法。本文将介绍Python列表的基本概念、常用操作以及一些实际应用。
    的头像 发表于 04-16 10:42 1679次阅读

    java中的重载重写的区别

    Java中的重载(Overload)和重写(Override)是两个重要的面向对象编程概念,尽管它们在使用和功能上有所不同,但它们都与方法和多态性相关。本文将全面介绍重载
    的头像 发表于 11-17 17:13 630次阅读