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标准库defaultdict模块使用示例
Apr 28 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
PyQt5实现简单数据标注工具
Mar 18 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
python中bytes和str类型的区别
Oct 21 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
Python 实现将某一列设置为str类型
Jul 14 Python
python绘制分布折线图的示例
Sep 24 Python
python实现批量提取指定文件夹下同类型文件
Apr 05 Python
python中mongodb包操作数据库
Apr 19 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
深入探讨PHP中的内存管理问题
2011/08/31 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
PHP合并静态文件详解
2014/11/14 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
Python yield 使用浅析
2015/05/28 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
Python入门必须知道的11个知识点
2018/03/21 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
使用Tkinter制作信息提示框
2020/02/18 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
如何提高MySql的安全性
2014/06/19 面试题
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
酒店办公室文员岗位职责
2013/12/18 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
会计电算化实训报告
2014/11/04 职场文书
新兵入伍决心书
2015/09/22 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书