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垃圾回收机制
Feb 12 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
python奇偶行分开存储实现代码
Mar 19 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
python实现画循环圆
Nov 23 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
在Tensorflow中查看权重的实现
Jan 24 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 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
Codeigniter注册登录代码示例
2014/06/12 PHP
两个php日期控制类实例
2014/12/09 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
对于this和$(this)的个人理解
2013/09/08 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
js查找节点的方法小结
2015/01/13 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
更改Python命令行交互提示符的方法
2015/01/14 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
python黑魔法之编码转换
2016/01/25 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
什么是View State?
2013/01/27 面试题
机关门卫岗位职责
2013/12/30 职场文书
党员大会主持词
2014/04/02 职场文书
学习十八大标语
2014/10/09 职场文书
怒海潜将观后感
2015/06/11 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书