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 文件和输入输出小结
Oct 09 Python
python实现挑选出来100以内的质数
Mar 24 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
pytorch 常用线性函数详解
Jan 15 Python
Pycharm安装并配置jupyter notebook的实现
May 18 Python
使用K.function()调试keras操作
Jun 17 Python
Python如何实现线程间通信
Jul 30 Python
python collections模块的使用
Oct 16 Python
如何利用python实现列表嵌套字典取值
Jun 10 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 MemCached高级缓存配置图文教程
2010/08/05 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
js 链式延迟执行DOME
2012/01/04 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
用Python 执行cmd命令
2020/12/18 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
计算机学生求职信范文
2014/01/30 职场文书
个人自荐材料
2014/05/23 职场文书
农业项目建议书
2014/08/25 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
Python入门之基础语法详解
2021/05/11 Python
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python