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 yield 使用浅析
May 28 Python
Python语言实现机器学习的K-近邻算法
Jun 11 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
python pandas 时间日期的处理实现
Jul 30 Python
Python坐标线性插值应用实现
Nov 13 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 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采集类Snoopy抓取图片实例
2014/06/19 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
在CMD命令行中运行python脚本的方法
2018/05/12 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
Django数据库迁移常见使用方法
2020/11/12 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
2014年党员整改措施
2014/10/24 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
诚实守信主题班会
2015/08/13 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers