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简单计算文件夹大小的方法
Jul 14 Python
Python实现控制台进度条功能
Jan 04 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
如何使用python操作vmware
Jul 27 Python
Django如何实现上传图片功能
Aug 16 Python
Python装饰器原理与基本用法分析
Jan 07 Python
Python如何输出整数
Jun 07 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中MD5函数使用实例代码
2008/06/07 PHP
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
wxPython使用系统剪切板的方法
2015/06/16 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
python3调用R的示例代码
2018/02/23 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
python 使用shutil复制图片的例子
2019/12/13 Python
Python常用库大全及简要说明
2020/01/17 Python
django orm模块中的 is_delete用法
2020/05/20 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
美国休闲服装品牌:Express
2016/09/24 全球购物
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
入党转预备思想汇报
2014/01/07 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
高中军训的心得体会
2014/09/01 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA