Python面向对象程序设计之继承、多态原理与用法详解


Posted in Python onMarch 23, 2020

本文实例讲述了Python面向对象程序设计之继承、多态原理与用法。分享给大家供大家参考,具体如下:

相关内容:

继承:多继承、super、__init__、重写父类变量或函数

多态


继承:

  • 在Python3中,不写基类的类默认继承object
  • 继承就是子类获得了父类的全部功能:比如学生和老师都有“姓名,性别,年龄、ID”等学校人员属性,如果学生和老师都直接继承学校人员的“姓名,性别,年龄、ID”,那么就不必要在学生类和老师类中重复定义了。
  • 继承指定类的方式是:class 类名(基类名Python面向对象程序设计之继承、多态原理与用法详解
class SchoolPerson:
  def study(self):
    print("it's time to study")

class Student(SchoolPerson):#继承的方法
  pass

a=Student()
a.study()

----------------------
结果:
it's time to study

上述结果显示,Student继承了SchoolPerson中的study函数

  • python支持多继承:class SubClassName (ParentClass1[, ParentClass2, ...]):
  • 对象对于属性【包括变量和函数】的查找路径:本实例对象--》本类--》基类【如果有多个基类,从左到右到基类中查找】
  • 可以调用基类的__init__方法:
    • 方式有两种:Python面向对象程序设计之继承、多态原理与用法详解,建议使用super,避免错误使用多次基类的__init__
class SchoolPerson:
  def __init__(self,name,age,sex,mid):
    self.name=name
    self.age=age
    self.sex=sex
    self.mid=mid
  def study(self):
    print("it's time to study")

class Student(SchoolPerson):#继承的方法
  def __init__(self,name,age,sex,mid,grade):
    # super(Student,self).__init__(name,age,sex,mid)
    SchoolPerson.__init__(self,name,age,sex,mid)
    self.grade=grade
  def study(self):
    print("i am student,i want to study")

a=Student('A',18,'m','001',1)
a.study()
print(a.name,a.age,a.mid,a.grade)
  • 对于多继承中的调用基类的__init__:无论多少个基类,也只会调用一次基类的__init__

Python面向对象程序设计之继承、多态原理与用法详解Python面向对象程序设计之继承、多态原理与用法详解Python面向对象程序设计之继承、多态原理与用法详解

  • 可以覆盖父类中属性【变量、函数】:
class SchoolPerson:
  def __init__(self,name,age,sex,mid):
    self.name=name
    self.age=age
    self.sex=sex
    self.mid=mid
  def study(self):
    print("it's time to study")

class Student(SchoolPerson):#继承的方法
  def __init__(self,name,age,sex,mid,grade):
    super(Student,self).__init__(name,age,sex,mid)
    self.grade=grade
  def study(self):
    print("i am student,i want to study")

a=Student('A',18,'m','001',1)
a.study()

--------------------------
结果:
i am student,i want to study

多态:

Python面向对象程序设计之继承、多态原理与用法详解

  • python是否具有多态具有争议性。
  • 但不论是否具有,这并不影响我们的具体使用。
class Animal:
  def __init__(self, name): 
    self.name = name
  def talk(self): 
    pass 
  @staticmethod ####如果硬要说多态,建议使用静态方法来处理,而非普通函数
  def animal_talk(obj):
    obj.talk()
class Cat(Animal):
  def talk(self):
    print('喵!')
class Dog(Animal):
  def talk(self):
    print('wang')

d = Dog("小黑")
c = Cat("小白")

# def animal_talk(obj):
#   obj.talk()  ###这也是一个能实现功能的函数,因此python多态才具有争议性

Animal.animal_talk(c)
Animal.animal_talk(d)

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

Python 相关文章推荐
linux环境下安装pyramid和新建项目的步骤
Nov 27 Python
操作Windows注册表的简单的Python程序制作教程
Apr 07 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
python实现获取Ip归属地等信息
Aug 27 Python
Python中字符串的处理技巧分享
Sep 17 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
python数据结构之线性表的顺序存储结构
Sep 28 Python
python+pyqt5实现24点小游戏
Jan 24 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 Python
python查看矩阵的行列号以及维数方式
May 22 Python
python - timeit 时间模块
Apr 06 Python
Python一些基本的图像操作和处理总结
Jun 23 Python
python实现图像拼接功能
Mar 23 #Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 #Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 #Python
Python3 pickle对象串行化代码实例解析
Mar 23 #Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 #Python
Python3 shelve对象持久存储原理详解
Mar 23 #Python
python新式类和经典类的区别实例分析
Mar 23 #Python
You might like
php代码优化及php相关问题总结
2006/10/09 PHP
PHP 翻页 实例代码
2009/08/07 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
python简单实现刷新智联简历
2016/03/30 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
Python tkinter事件高级用法实例
2018/01/31 Python
python单例模式的多种实现方法
2019/07/26 Python
python列表生成器迭代器实例解析
2019/12/19 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
Python如何将装饰器定义为类
2020/07/30 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
运动会跳远广播稿
2014/02/04 职场文书
公民授权委托书
2014/10/15 职场文书