Python面向对象程序设计之继承、多态原理与用法详解

 更新时间:2020年03月23日 11:04:58   作者:随风行云  
这篇文章主要介绍了Python面向对象程序设计之继承、多态,结合实例形式分析了Python面向对象程序设计中继承、多态的相关概念、原理、用法及操作注意事项,需要的朋友可以参考下

本文实例讲述了Python面向对象程序设计之继承、多态原理与用法。分享给大家供大家参考,具体如下:

相关内容:

继承:多继承、super、__init__、重写父类变量或函数

多态


继承:

  • 在Python3中,不写基类的类默认继承object
  • 继承就是子类获得了父类的全部功能:比如学生和老师都有“姓名,性别,年龄、ID”等学校人员属性,如果学生和老师都直接继承学校人员的“姓名,性别,年龄、ID”,那么就不必要在学生类和老师类中重复定义了。
  • 继承指定类的方式是:class 类名(基类名image
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__方法:
    • 方式有两种:image,建议使用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__

imageimageimage

  • 可以覆盖父类中属性【变量、函数】:
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

多态:

image

  • 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数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • 基于Python实现层次性数据和闭包性质

    基于Python实现层次性数据和闭包性质

    这篇文章主要介绍了如何利用Python实现层次性数据和闭包性质,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以了解一下
    2022-05-05
  • Python延迟绑定问题原理及解决方案

    Python延迟绑定问题原理及解决方案

    这篇文章主要介绍了Python延迟绑定问题原理及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • python编程webpy框架模板之def with学习

    python编程webpy框架模板之def with学习

    这篇文章主要为大家介绍了python编程web.py框架模板之def with的学习有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Python中的变量赋值

    Python中的变量赋值

    这篇文章主要介绍了Python中的变量赋值,Python中的变量在使用中很流畅,可以不关注类型,任意赋值,对于开发来说效率得到了提升,但不了解其中的机理,往往也会犯一些小错,让开发进行的不那么流畅,本文就从语言设计和底层原理的角度,带大家理解Python中的变量。
    2021-10-10
  • 基于python的matplotlib制作双Y轴图

    基于python的matplotlib制作双Y轴图

    这篇文章主要介绍了基于python的matplotlib制作双Y轴图,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-04-04
  • Python高级编程之继承问题详解(super与mro)

    Python高级编程之继承问题详解(super与mro)

    这篇文章主要介绍了Python高级编程之继承问题,结合实例形式详细分析了Python多继承、MRO顺序及super调用父类等相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • 如何用python做逐步回归

    如何用python做逐步回归

    这篇文章主要介绍了如何用python 做逐步回归,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • python密码学列置换密码学习

    python密码学列置换密码学习

    这篇文章主要为大家介绍了python密码学列置换密码学习的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 使用python爬取B站千万级数据

    使用python爬取B站千万级数据

    B站我想大家都熟悉吧,其实 B 站的爬虫网上一搜一大堆。不过纸上得来终觉浅,绝知此事要躬行,我码故我在。
    2018-06-06
  • python中list列表的高级函数

    python中list列表的高级函数

    这篇文章主要为大家详细介绍了python中list列表的高级函数,感兴趣的小伙伴们可以参考一下
    2016-05-05

最新评论