python小白的进阶——细说继承和多态(附代码)

Posted 肥学大师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python小白的进阶——细说继承和多态(附代码)相关的知识,希望对你有一定的参考价值。

导读

帅气的肥学又来了!!!
在这里插入图片描述
最近刚学完java对继承和多态总感觉不太熟练,在查资料的时候以外搜到了python的继承多态觉得有趣,就拿来和大家分享一下,可以和java一起来对比操作。

继承

什么是继承

在这里插入图片描述

  • 当然了,上图只是个比喻其实在代码里继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。注意:python中的继承分为:单继承和多继承
  • 继承的目的就是提高代码的重用率减少了很多不必要的代码量,有下图就可以看出动物有,猫和狗的基本特性,动物就是父,猫和狗就是子
    在这里插入图片描述

继承的特点

  • 1、在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数

  • 2、在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。

  • 3、Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

  • 4、继承中父类:用于被继承的类,称之为父类,也叫做基类,或者超类。子类:继承其他类的类,称之为子类,也叫做派生类。

单继承

  • python支持类的继承。如果一种语言不支持继承,类就没什么意义。这方面我语言上说在流畅还不如看看代码来的实际。(个人觉得)

class Animal: #父类
    def eat(self): 
        print("-----吃-----")

    def drink(self):
        print("-----喝-----")
        
    def sleep(self):
        print("-----睡-----")


class Dog(Animal): #子类继承父类
    """
    def eat(self):
        print("-----吃-----")

    def drink(self):
        print("-----喝-----")
     
     def sleep(self):
        print("-----睡-----")
    """
    pass


class Cat:
    pass


wang_cai = Dog()
wang_cai.eat()
wang_cai.drink()
wang_cai.sleep()#wang——cai继承了动物的吃,喝,睡

多层继承

在这里插入图片描述
简单说就是这样的关系:动物——狗——哮天犬(就是越来越具体化了)一个子类继承了父类之后又被其他子类继承

class Animal:
    def eat(self):
        print("-----吃-----")

    def drink(self):
        print("-----喝-----")


class Dog(Animal):
    def bark(self):
        print("-----汪汪叫------")


class XTQ(Dog):
    """定义了一个哮天犬 类"""
    pass
#继承之后哮天犬就会“吃”,“喝”,“汪汪叫”

重写

顾名思义就是重新写这个方法但是:方法名是不变的

比如:


class Animal: #父类
    def eat(self):
        print("-----吃-----")

    def drink(self):
        print("-----喝-----")

 
class Dog(Animal): 
    def bark(self):
        print("-----汪汪叫------")


class XTQ(Dog): #重写Dog方法
    """定义了一个哮天犬 类"""
    def bark(self):
        print("----嗷嗷叫-----")
#重写了bark

多继承

在这里插入图片描述
这张图就比较清楚的表达了多继承的意思,一个动物同时继承了企鹅和二哈

如下代码:


# 定义一个父类
class qi-e:
    def printA(self):
        print('----企鹅----')

# 定义一个父类
class er-ha:
    def printB(self):
        print('----二哈----')

# 定义一个子类,继承自A、B
class C(A,B):
    def printC(self):
        print('----我也不知道是什么----')

obj_C = C()
obj_C.printA()
obj_C.printB()

多态

  • 作用:让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。
  • 特点:只关心对象的实例方法是否同名,不关心对象所属的类型;对象所属的类之间,继承关系可有可无;多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强;多态是调用方法的技巧,不会影响到类的内部设计。
class Duck:
    def quack(self):
        print("Quaaaaaack!")


class Bird:
    def quack(self):
        print("bird imitate duck.")


class Doge:
    def quack(self):
        print("doge imitate duck.")


def in_the_forest(duck):
    duck.quack()


duck = Duck()
bird = Bird()
doge = Doge()
for x in [duck, bird, doge]:
    in_the_forest(x)

拓展:

  • Java中多态性的表现: 多态性,可以理解为一个事物的多种形态。同样python中也支持多态,但是是有限的的支持多态性,主要是因为python中变量的使用不用声明,所以不存在父类引用指向子类对象的多态体现,同时python不支持重载。在python中 多态的使用不如Java中那么明显,所以python中刻意谈到多态的意义不是特别大。

总结

我觉得语言这种东西自己用哪个方便就用哪个,java和python中继承和多态各有千秋,使用的时候还是选自己放心的,同时两者也可以对比着来记,不是说会一种语言就好了,还是多学点为好万一用的找还可以救自己一命。
在这里插入图片描述
谢谢!!!
另外先和大家提一下,肥学准备暑假搞个前后端都有的系统如果时间充裕写个python的再写个java的毕竟要考研的,这可能是最后一次大规模练手了,到时候还希望大家多多支持,感谢感谢 😃

以上是关于python小白的进阶——细说继承和多态(附代码)的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记-面向对象进阶封装多态继承

Python类和对象以及继承多态(超详细,小白也可以懂)

细说Java面向对象三大特性:继承封装多态

测开之面向对象进阶篇・《多态》

面向对象进阶1

面向对象进阶