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 zip文件 压缩
Dec 24 Python
Python实例分享:快速查找出被挂马的文件
Jun 08 Python
Python实现子类调用父类的方法
Nov 10 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 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
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
python实现SMTP邮件发送功能
2020/06/16 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
Python socket 套接字实现通信详解
2019/08/27 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
python中pickle模块浅析
2020/12/29 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
艺术用品:Arteza
2018/11/25 全球购物
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
小学优秀学生评语
2014/12/29 职场文书
事业单位个人总结
2015/02/12 职场文书
作弊检讨书范文
2015/05/06 职场文书
搞笑结婚保证书
2015/05/08 职场文书