新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 程序开发 > 语言 > Python

Python面向对象之继承、重写与重载

时间:2019-06-14 10:53:01  来源:  作者:

回顾

Python进阶记录之基础篇(十六)中,我们介绍了Python面向对象中对属性的访问限制,需要重点掌握私有变量和公有变量的区别和用法,牢记面向对象的编程规则。今天我们讲一下Python面向对象中的另一个重要特点——继承。

继承的基本概念

继承是面向对象的三个基本特征之一,当我们在定义一个类的时候,可以继承某个已存在的类,新定义的类称为子类,而被继承的类称为父类,也叫做基类或超类。

例如之前内容中我们定义类Student的时候,其实是继承了Python中的基类object,我们称Student继承自object,Student是object的子类,object是Student的父类。

继承可以使子类具有父类的各种属性和方法,而不需要再次编写相同的代码。

Python面向对象之继承、重写与重载

继承的基本概念

上述代码中,我们首先定义了一个Person类,然后再定义一个Men类,并让它继承自Person类,Python中继承的写法就是在类名后的括号中写入要继承的类名。可以看到,虽然在类Men中,我们没有写任何代码,但是由于它继承自Person类,在创建Men对象的时候,我们可以传入父类Person中的name和age属性,并能使用父类的成员方法eat( )。

子类除了继承父类的所有属性和方法外,也能够定义自己特有的属性和方法。

Python面向对象之继承、重写与重载

子类定义特有的属性和方法

我们给Men方法定义父类没有的属性post以及成员方法info( ),在初始化方法__init__( )中,为了继承父类的属性,我们需要调用父类的__init__( )方法,调用方式有以下两种:

1、父类名.__init__(self, 各属性名)
2、super(子类名, self).__init__(各属性名)

当然,由于我们这里的Person类的属性都定义成了私有变量,对于子类Men来说,其实并没有继承__name和__age,因为Person类的私有变量是不允许Person类外部调用的,子类只能继承父类的公有变量。但我们仍然需要调用父类的__init__( )进行继承,这样才能更好地使用从父类继承过来的成员方法。

重写与重载

子类在继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。

Python面向对象之继承、重写与重载

方法重写

以上代码中,我们将父类Person中的name改成公有变量,然后在子类Men中也定义一个成员方法eat( )。可以看到,此时再调用eat( )方法,将调用子类Men中的eat( )方法。这种子类覆盖父类方法的写法我们就叫做方法的重写。

如果你熟悉面向对象,那么你肯定知道除了重写,还有一个重载的概念。重载是指在一个类里面,方法名字相同,而参数不同,参数不同可以是参数类型不同,也可以是参数个数不同。

Python面向对象之继承、重写与重载

方法重载的概念

我们在类Person中定义了两个eat( )方法,一个接收一个参数,另一个接收两个参数,这就是方法的重载。然而,当我们试图调用一个参数的eat( )方法时,Python报错了,它只承认接收两个参数的eat( )方法。这是为什么呢?

事实上,Python根本不需要方法的重载。我们知道,重载主要是参数类型不同或参数个数不同。对于参数类型不同,因为Python可以接受任何类型的参数,不同的参数类型在Python中是相同的代码,所以没有必要做成两个不同函数。而对于参数个数不同,因为Python有缺省参数的功能,我们对于参数个数不确定的参数设定为缺省参数即可解决问题。

Python面向对象之继承、重写与重载

Python中的重载

我们将之前的两个eat( )方法合并,只需将参数变为可变参数即可实现相关需求。由此可见,对于重载中参数不同的两个要求都有对应的解决方案,Python自然就不需要方法重载了。

总结

以上内容介绍了Python面向对象中继承的相关知识以及重写和重载的区别和实现,需要重点掌握继承的基本概念和用法,理解重写和重载的区别。感谢大家的支持与关注,欢迎一起学习交流~
 



Tags:Python   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
B站在小视频功能处提供了 API 接口,今天的任务爬取Bilibili视频~B 站视频网址:https://vc.bilibili.com/p/eden/rank#/?tab=全部 此次爬取视频,我们爬取前100个~我们做好前期...【详细内容】
2019-11-27   Python  点击:(0)  评论:(0)  加入收藏
SQL注入就是攻击者在前端的表单输入中,或者 API 的传参时,按照 SQL 的语法,人为地加入一段代码,改变原有的SQL 逻辑,来跳过验证,篡改或者删除数据库,达到攻击者的目的的过程。SQL注...【详细内容】
2019-11-27   Python  点击:(0)  评论:(0)  加入收藏
通用爬虫和聚焦爬虫根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种.通用爬虫通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是...【详细内容】
2019-11-27   Python  点击:(0)  评论:(0)  加入收藏
1.1 变量和赋值语句#使用Python变量前必须给它赋值,因为其无默认值x=31.2 Python神奇之处1#可同时给多个变量赋值x,y,z=1,2,3a=b=123#简单的多变量间值交换a,b,c,d='a&#3...【详细内容】
2019-11-25   Python  点击:(1)  评论:(0)  加入收藏