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聊天室实例程序分享
Jan 05 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
python如何实现一个刷网页小程序
Nov 27 Python
使用python opencv对目录下图片进行去重的方法
Jan 12 Python
python感知机实现代码
Jan 18 Python
python获取txt文件词向量过程详解
Jul 05 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
Python timeit模块的使用实践
Jan 13 Python
python随机模块random使用方法详解
Feb 14 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 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中的日期处理方法集锦
2007/01/02 PHP
php 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
javascript 模拟点击广告
2010/01/02 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
python解析json实例方法
2013/11/19 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
python调用百度语音识别api
2018/08/30 Python
Python列表与元组的异同详解
2019/07/02 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
个人求职简历中英文自我评价
2013/12/16 职场文书
反邪教警示教育方案
2014/05/13 职场文书
工作失误检讨书
2015/01/26 职场文书
内勤岗位职责
2015/02/10 职场文书
2015年路政工作总结
2015/05/22 职场文书
2015国庆节宣传语
2015/07/14 职场文书
MySQL一些常用高级SQL语句
2021/07/03 MySQL
Django模型层实现多表关系创建和多表操作
2021/07/21 Python