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中expandtabs()方法的使用
May 18 Python
Python中unittest模块做UT(单元测试)使用实例
Jun 12 Python
Python字符串格式化输出方法分析
Apr 13 Python
Django Highcharts制作图表
Aug 27 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
Django框架反向解析操作详解
Nov 28 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
小 200 行 Python 代码制作一个换脸程序
May 12 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
python实现ROA算子边缘检测算法
Apr 05 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 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
PHP5 字符串处理函数大全
2010/03/23 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
php实现数字补零的方法总结
2018/09/12 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
JS Timing
2007/04/21 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
JS打印彩色菱形的实例代码
2018/08/15 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
Python实现学校管理系统
2018/01/11 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
pandas带有重复索引操作方法
2018/06/08 Python
python中append实例用法总结
2019/07/30 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
《草原》教学反思
2014/02/15 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python