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 相关文章推荐
举例讲解Linux系统下Python调用系统Shell的方法
Nov 07 Python
20招让你的Python飞起来!
Sep 27 Python
Python实现学生成绩管理系统
Apr 05 Python
详解python字节码
Feb 07 Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
Oct 29 Python
利用ctypes获取numpy数组的指针方法
Feb 12 Python
详解python中递归函数
Apr 16 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
总结几个非常实用的Python库
Jun 26 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 中文处理函数集合
2008/08/27 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
8个PHP数组面试题
2015/06/23 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
python简单分割文件的方法
2015/07/30 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
python之消除前缀重命名的方法
2018/10/21 Python
python实现键盘输入的实操方法
2019/07/16 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
Numpy数组的广播机制的实现
2020/11/03 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
美容院经理岗位职责
2014/04/03 职场文书
植树节口号
2014/06/21 职场文书
司机个人年终总结
2015/03/03 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
如何写好闭幕词
2019/04/02 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python
nginx常用配置conf的示例代码详解
2022/03/21 Servers