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 01 Python
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
python列表的常用操作方法小结
May 21 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
python用post访问restful服务接口的方法
Dec 07 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
Python unittest生成测试报告过程解析
Sep 08 Python
Python离线安装各种库及pip的方法
Nov 28 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
用js重建星际争霸
2006/12/22 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
Python hmac模块使用实例解析
2019/12/24 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
护士自荐信怎么写
2013/10/18 职场文书
自我鉴定写作要点
2014/01/17 职场文书
争论的故事教学反思
2014/02/06 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
会议简讯范文
2015/07/20 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
OpenFeign实现远程调用
2022/08/14 Java/Android