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 相关文章推荐
python实现得到一个给定类的虚函数
Sep 28 Python
python写xml文件的操作实例
Oct 05 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
Python2.x利用commands模块执行Linux shell命令
Mar 11 Python
python实现飞机大战
Sep 11 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
Jan 08 Python
你应该知道的Python3.6、3.7、3.8新特性小结
May 12 Python
关于tensorflow softmax函数用法解析
Jun 30 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
python not运算符的实例用法
Jun 30 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中array_merge与array+array的区别
2013/06/21 PHP
Destoon实现多表查询示例
2014/08/21 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
js类中获取外部函数名的方法
2007/08/19 Javascript
二行代码解决全部网页木马
2008/03/28 Javascript
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python pickle 和 shelve模块的用法
2013/09/16 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
keras之权重初始化方式
2020/05/21 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
加拿大最大的书店:Indigo
2017/01/01 全球购物
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS