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使用chardet判断字符编码
May 09 Python
python网络编程之数据传输UDP实例分析
May 20 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
Jul 23 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
pymongo中group by的操作方法教程
Mar 22 Python
Django CBV类的用法详解
Jul 26 Python
Pycharm小白级简单使用教程
Jan 08 Python
基于pycharm实现批量修改变量名
Jun 02 Python
python爬虫调度器用法及实例代码
Nov 30 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 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
php cookie 登录验证示例代码
2009/03/16 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
Python with用法实例
2015/04/14 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
一看就懂得Python的math模块
2018/10/21 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
python实现学生通讯录管理系统
2021/02/25 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
eBay美国官网:eBay.com
2020/10/24 全球购物
SQL Server笔试题
2012/01/10 面试题
教师评优事迹材料
2014/01/10 职场文书
廉洁使者实施方案
2014/03/29 职场文书
护理见习报告范文
2014/11/03 职场文书
2014年工程师工作总结
2014/11/25 职场文书
作文评语怎么写
2014/12/25 职场文书
学校党员干部承诺书
2015/05/04 职场文书
社团招新宣传语
2015/07/13 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL