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 18 Python
跟老齐学Python之编写类之三子类
Oct 11 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
Django models.py应用实现过程详解
Jul 29 Python
django 控制页面跳转的例子
Aug 06 Python
python内置函数sorted()用法深入分析
Oct 08 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 Python
Python中快速掌握Data Frame的常用操作
Mar 31 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语法(5)
2006/10/09 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
理解Javascript_08_函数对象
2010/10/15 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
商务英语专业毕业生自荐信
2013/11/05 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
图书室标语
2014/06/21 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
简爱读书笔记
2015/06/26 职场文书
酒店温馨提示语
2015/07/14 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记