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使用xauth方式登录饭否网然后发消息
Apr 11 Python
用python 制作图片转pdf工具
Jan 30 Python
python使用pil生成缩略图的方法
Mar 26 Python
详解Python3中的Sequence type的使用
Aug 01 Python
Python3 replace()函数使用方法
Mar 19 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
Python如何用filter函数筛选数据
Mar 05 Python
Python爬虫实现vip电影下载的示例代码
Apr 20 Python
pycharm导入源码的具体步骤
Aug 04 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
python爬取豆瓣电影TOP250数据
May 23 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初学者头痛的十四个问题
2006/07/12 PHP
PHP原理之异常机制深入分析
2010/08/08 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
python 6行代码制作月历生成器
2020/09/18 Python
python批量修改交换机密码的示例
2020/09/22 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
二年级体育教学反思
2014/01/15 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
利用Redis实现点赞功能的示例代码
2022/06/28 Redis