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 相关文章推荐
Tensorflow简单验证码识别应用
May 25 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 Python
对python 命令的-u参数详解
Dec 03 Python
python xpath获取页面注释的方法
Jan 14 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
python按比例随机切分数据的实现
Jul 11 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
Python为何不支持switch语句原理详解
Oct 21 Python
python飞机大战游戏实例讲解
Dec 04 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 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 Imagick获取图片RGB颜色值
2014/07/28 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
php实现微信扫码支付
2017/03/26 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
fetch 使用及如何接收JS传值
2017/11/11 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
加拿大探亲邀请信
2014/01/28 职场文书
班风学风建设方案
2014/05/06 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
体育教师求职信
2014/06/30 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
领导班子整改方案
2014/10/25 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers