Python面向对象程序设计之继承与多继承用法分析


Posted in Python onJuly 13, 2018

本文实例讲述了Python面向对象程序设计之继承与多继承。分享给大家供大家参考,具体如下:

1. 继承

在C++和Java中,使用继承时,子类的构造函数会自动调用父类的构造函数,但在Python中,子类必须显式的在__init__()函数中再次调用父类中的__init__()函数。如下例:

class Employee(object):
  def __init__(self, name, salary = 0):
    self.name = name
    self.salary = salary
  def raisesalary(self, percent):
    self.salary = self.salary * (1 + percent)
  def work(self):
    print self.name, "writes computer code"
class Designer(Employee):
  def __init__(self, name):
    Employee.__init__(self, name, 5000)
  def work(self):
    print self.name, "writes design document"

子类Designer也可以使用super来进行初始化。

class Designer(Employee):
  def __init__(self, name):
    super(Designer, self).__init__(name, 5000)
  def work(self):
    print self.name, "writes design document"

2. 多继承

在C++中,使用虚继承来实现多继承,以避免子类在继承时多次调用基类的构造函数,而在Java中,则取消了多继承,使用接口来达到多继承的效果。在Python中的解决方案是MRO即Method Resolution Order,方法解析顺序。主要是通过super方法实现的。但如果用super方法来解决多继承问题,由于各个父类中的__init__()函数中参数的数量可能不同,那应该怎么初始化呢?如下例。

class A(object):
  def __init__(self, a):
    print a
class B(object):
  def __init__(self, a, b):
    print a+b
class C(A, B):
  def __init__(self):
    super(C,self).__init__(?)
c = C()

则?处应该填几个参数?

答案是1个参数,因为按照继承的顺序,A类中的构造需要1个参数初始化即可。即super函数与父类的继承顺序有关,且初始化父类继承顺序中,最先有__init__()方法的那个。

super方法的使用仍在继续探索中。。。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 命令行参数sys.argv
Sep 06 Python
python中requests模块的使用方法
Apr 08 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
Django 实现前端图片压缩功能的方法
Aug 07 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
Aug 23 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
Django框架安装方法图文详解
Nov 04 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
如何在Python 游戏中模拟引力
Mar 27 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 #Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 #Python
Python爬虫实现简单的爬取有道翻译功能示例
Jul 13 #Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 #Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 #Python
python实战教程之自动扫雷
Jul 13 #Python
详解Python3.6的py文件打包生成exe
Jul 13 #Python
You might like
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
Python smallseg分词用法实例分析
2015/05/28 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
Python 装饰器使用详解
2017/07/29 Python
Python制作词云的方法
2018/01/03 Python
python中eval与int的区别浅析
2019/08/11 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
保安公司服务承诺书
2014/05/28 职场文书
另类冲刺标语
2014/06/24 职场文书
先进个人事迹材料
2014/12/29 职场文书
母亲去世追悼词
2015/06/23 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android
httpclient调用远程接口的方法
2022/08/14 Java/Android