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中isalnum()方法的使用
May 18 Python
Python中title()方法的使用简介
May 20 Python
Python实现数通设备端口使用情况监控实例
Jul 15 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
python中的变量如何开辟内存
Jun 26 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
Python通用循环的构造方法实例分析
Dec 19 Python
python修改txt文件中的某一项方法
Dec 29 Python
python对于requests的封装方法详解
Jan 03 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
Python基于yield遍历多个可迭代对象
Mar 12 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解决DOM乱码的方法示例代码
2016/11/20 PHP
php防止sql注入的方法详解
2017/02/20 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
浅谈python多线程和队列管理shell程序
2015/08/04 Python
Python性能提升之延迟初始化
2016/12/04 Python
python得到电脑的开机时间方法
2018/10/15 Python
关于python多重赋值的小问题
2019/04/17 Python
Python3中列表list合并的四种方法
2019/04/19 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
诗普兰迪官方网站:Splendid
2018/09/18 全球购物
卫生巾广告词
2014/03/18 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
保研专家推荐信范文
2015/03/25 职场文书
幼儿园工作总结2015
2015/04/01 职场文书
大学运动会通讯稿
2015/07/18 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
Python学习之时间包使用教程详解
2022/03/21 Python