Python中的单继承与多继承实例分析


Posted in Python onMay 10, 2018

本文实例讲述了Python中的单继承与多继承。分享给大家供大家参考,具体如下:

单继承

一、介绍

Python 同样支持类的继承,如果一种语言不支持继承,类就没有什么意义。派生类的定义如下所示:

class DerivedClassName(BaseClassName1):
  <statement-1>
  .
  .
  .
  <statement-N>

需要注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。

BaseClassName(示例中的基类名)必须与派生类定义在一个作用域内。
除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:

class DerivedClassName(modname.BaseClassName):

二、代码

# -*- coding:utf-8 -*-
#! python3
class people:
  #定义基本属性
  name =''
  age =0
  #定义私有属性,私有属性在类外部无法直接进行访问
  __weight =0
  #定义构造方法
  def __init__(self,n,a,w):
    self.name = n
    self.age = a
    self.__weight = w
  def speak(self):
    print("%s 说: 我 %d 岁。"%(self.name,self.age))
    #单继承示例
class student(people):
  grade =''
  def __init__(self,n,a,w,g):
    #调用父类的构造函数,下面两种方式都可以
    #people.__init__(self,n,a,w)
    super().__init__(n,a,w)
    self.grade = g
    #覆写父类的方法
  def speak(self):
    print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
s = student('ken',10,60,3)
s.speak()

三、运行结果

ken 说: 我 10 岁了,我在读 3 年级

多继承

一、介绍

Python同样有限的支持多继承形式。多继承的类定义形如下例:

class DerivedClassName(Base1, Base2, Base3):
  <statement-1>
  .
  .
  .
  <statement-N>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

二、代码

# -*- coding:utf-8 -*-
#! python3
#类定义
class people:
  #定义基本属性
  name =''
  age =0
  #定义私有属性,私有属性在类外部无法直接进行访问
  __weight =0
  #定义构造方法
  def __init__(self,n,a,w):
    self.name = n
    self.age = a
    self.__weight = w
  def speak(self):
    print("%s 说: 我 %d 岁。"%(self.name,self.age))
#单继承示例
class student(people):
  grade =''
  def __init__(self,n,a,w,g):
    #调用父类的构函
    people.__init__(self,n,a,w)
    self.grade = g
  #覆写父类的方法
  def speak(self):
    print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
#另一个类,多重继承之前的准备
class speaker():
  topic =''
  name =''
  def __init__(self,n,t):
    self.name = n
    self.topic = t
  def speak(self):
    print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))
#多重继承
class sample(speaker,student):
  a =''
  def __init__(self,n,a,w,g,t):
    student.__init__(self,n,a,w,g)
    speaker.__init__(self,n,t)
test = sample("Tim",25,80,4,"Python")
test.speak()#方法名同,默认调用的是在括号中排前地父类的方法

三、运行结果

我叫 Tim,我是一个演说家,我演讲的主题是 Python

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
Python简单生成8位随机密码的方法
May 24 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
使用Python更换外网IP的方法
Jul 09 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
python使用多线程查询数据库的实现示例
Aug 17 Python
Django如何继承AbstractUser扩展字段
Nov 27 Python
Python list去重且保持原顺序不变的方法
Apr 03 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
如何判断pytorch是否支持GPU加速
Jun 01 Python
python3处理含有中文的url方法
May 10 #Python
Python异常处理操作实例详解
May 10 #Python
解决python3 网络请求路径包含中文的问题
May 10 #Python
Python之文字转图片方法
May 10 #Python
Python实现查看系统启动项功能示例
May 10 #Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 #Python
Python实现修改IE注册表功能示例
May 10 #Python
You might like
咖啡知识大全
2021/03/03 新手入门
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
2010/05/15 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
Vue性能优化的方法
2020/07/30 Javascript
python转换摩斯密码示例
2014/02/16 Python
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
python简单实例训练(21~30)
2017/11/15 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
应届医学毕业生求职信分享
2013/12/02 职场文书
同居协议书范本
2014/04/23 职场文书
建筑结构施工求职信
2014/07/11 职场文书
最新离婚协议书范本
2014/08/19 职场文书
教师学期个人总结
2015/02/11 职场文书
证婚人致辞精选
2015/07/28 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android