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构造函数及解构函数介绍
Feb 26 Python
浅析Python中的多重继承
Apr 28 Python
使用Python写CUDA程序的方法
Mar 27 Python
详解Python核心编程中的浅拷贝与深拷贝
Jan 07 Python
Python比较2个时间大小的实现方法
Apr 10 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
对python 自定义协议的方法详解
Feb 13 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
Python3自定义json逐层解析器代码
May 11 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 Python
用python读取xlsx文件
Dec 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
一个分页的论坛
2006/10/09 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
详解AngularJS ng-class样式切换
2017/06/27 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
js实现关闭网页出现是否离开提示
2017/12/07 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
python获取list下标及其值的简单方法
2016/09/12 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
一百行python代码将图片转成字符画
2021/02/19 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
医学生求职自荐信
2013/10/25 职场文书
销售会计岗位职责
2014/03/15 职场文书
导师推荐信范文
2014/05/09 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
焦裕禄观后感
2015/06/03 职场文书
高一地理教学工作总结
2015/08/12 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
如何在C++中调用Python
2021/05/21 Python
python实现局部图像放大
2021/11/17 Python