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 self,cls,decorator的理解
Jul 13 Python
python的paramiko模块实现远程控制和传输示例
Oct 13 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
利用python将xml文件解析成html文件的实现方法
Dec 22 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
python批量图片处理简单示例
Aug 06 Python
Python一行代码解决矩阵旋转的问题
Nov 30 Python
Python面向对象原理与基础语法详解
Jan 02 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 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
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
PHP中for与foreach的区别分析
2011/03/09 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
php获取url参数方法总结
2014/11/13 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
Windows下安装python2.7及科学计算套装
2015/03/05 Python
Python3里的super()和__class__使用介绍
2015/04/23 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python实现仿射密码的思路详解
2020/04/23 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
班组长安全生产职责
2013/12/16 职场文书
2014升学宴答谢词
2014/01/26 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
三八妇女节慰问信
2015/02/14 职场文书
学生保证书格式
2015/02/27 职场文书
村官个人总结范文
2015/03/03 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
深入探讨opencv图像矫正算法实战
2021/05/21 Python
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript