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中的Null模式与桥接模式编程
Feb 02 Python
Django小白教程之Django用户注册与登录
Apr 22 Python
Python对象转JSON字符串的方法
Apr 27 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 Python
Python中实现switch功能实例解析
Jan 11 Python
python删除过期log文件操作实例解析
Jan 31 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
python实现输入三角形边长自动作图求面积案例
Apr 12 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
几款Python编译器比较与推荐(小结)
Oct 15 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数组中删除元素的实现代码
2012/06/22 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
javascript每日必学之封装
2016/02/23 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
React如何避免重渲染
2018/04/10 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
深入理解Python中的内置常量
2017/05/20 Python
python 显示数组全部元素的方法
2018/04/19 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
初中三年学生的学习自我评价
2013/11/13 职场文书
更夫岗位责任制
2014/02/11 职场文书
青岛海底世界导游词
2015/02/11 职场文书
2015年幼师工作总结
2015/04/28 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
python基础之//、/与%的区别详解
2022/06/10 Python