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提取html文件中的特定数据的实现代码
Mar 24 Python
python发布模块的步骤分享
Feb 21 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
在Python 不同级目录之间模块的调用方法
Jan 19 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
python绘制玫瑰的实现代码
Mar 02 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
Python爬取豆瓣数据实现过程解析
Oct 27 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
详解在OpenCV中如何使用图像像素
Mar 03 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中$_SERVER的详细参数与说明
2008/07/29 PHP
php 抽象类的简单应用
2011/09/06 PHP
php自定义session示例分享
2014/04/22 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
js实现图片轮播效果
2015/12/19 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
React优化子组件render的使用
2019/05/12 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python检测某个变量是否有定义的方法
2015/05/20 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
详解Python中where()函数的用法
2018/03/27 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
用python实现名片管理系统
2020/06/18 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
好的演讲稿开场白
2013/12/30 职场文书
西式婚礼证婚词
2014/01/12 职场文书
学习决心书
2014/03/11 职场文书
低碳环保倡议书
2014/04/14 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书