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实现保存网页到本地示例
Mar 16 Python
python进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
python 容器总结整理
Apr 04 Python
python进行TCP端口扫描的实现
Dec 21 Python
python面向对象法实现图书管理系统
Apr 19 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Python 判断时间是否在时间区间内的实例
May 16 Python
python Selenium 库的使用技巧
Oct 16 Python
7个关于Python的经典基础案例
Nov 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
php中的比较运算符详解
2013/10/28 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
vue.js实现照片放大功能
2020/06/23 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
python获取当前日期和时间的方法
2015/04/30 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
个人自我鉴定写法
2013/11/30 职场文书
饭店工作计划书
2014/01/10 职场文书
促销活动策划方案
2014/01/12 职场文书
国际贸易专业求职信
2014/06/04 职场文书
2014年国庆标语
2014/06/30 职场文书
母亲节寄语大全
2015/02/27 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
股权投资协议书
2016/03/23 职场文书
vue 实现上传组件
2021/05/31 Vue.js
Java移除无效括号的方法实现
2021/08/07 Java/Android