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 ljust rjust center输出
Sep 06 Python
python查询sqlite数据表的方法
May 08 Python
Python模块搜索概念介绍及模块安装方法介绍
Jun 03 Python
python根据日期返回星期几的方法
Jul 06 Python
python os.path模块常用方法实例详解
Sep 16 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
如何完美的建立一个python项目
Oct 09 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
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
原生js实现轮播图
2017/02/27 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
uniapp实现可滑动选项卡
2020/10/21 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
Python File readlines() 使用方法
2018/03/19 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
python的数学算法函数及公式用法
2020/11/18 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
HTML5标签大全
2016/11/23 HTML / CSS
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
本科毕业生的求职信范文
2013/11/20 职场文书
管理部部长岗位职责
2013/12/05 职场文书
商超业务员岗位职责
2015/02/13 职场文书
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL