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之dict()的操作方法
Sep 24 Python
利用python3随机生成中文字符的实现方法
Nov 24 Python
快速了解Python相对导入
Jan 12 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
opencv3/python 鼠标响应操作详解
Dec 11 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
django orm模块中的 is_delete用法
May 20 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
深入浅析Python代码规范性检测
Jul 31 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 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
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
深入php之规范编程命名小结
2013/05/15 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
谈谈JS中的!!
2017/12/07 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
C#面试题问题集
2016/04/02 面试题
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
十岁生日父母答谢词
2014/01/18 职场文书
求职信需要的五点内容
2014/02/01 职场文书
年终奖发放方案
2014/06/02 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers