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中用Ctrl+C终止多线程程序的问题解决
Mar 30 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
解决Python运行文件出现out of memory框的问题
Dec 03 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
softmax及python实现过程解析
Sep 30 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
导致python中import错误的原因是什么
Jul 01 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
python下载的库包存放路径
Jul 27 Python
如何编写python的daemon程序
Jan 07 Python
Python超详细分步解析随机漫步
Mar 17 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中常用编辑器推荐
2007/01/02 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
浅谈php的优缺点
2015/07/14 PHP
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python中的rfind()方法使用详解
2015/05/19 Python
Python进行数据提取的方法总结
2016/08/22 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
python开启debug模式的方法
2019/06/27 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
科研课题实施方案
2014/03/18 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
软件售后服务方案
2014/05/29 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
CSS实现章节添加自增序号的方法
2021/06/23 HTML / CSS