Python中的多态如何理解?

Python中多态的作用

让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。

Python中多态的特点

1、只关心对象的实例方法是否同名,不关心对象所属的类型;

2、对象所属的类之间,继承关系可有可无;

3、多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强;

4、多态是调用方法的技巧,不会影响到类的内部设计。

多态的应用场景

1. 对象所属的类之间没有继承关系

调用同一个函数fly(), 传入不同的参数(对象),可以达成不同的功能

class Duck(object):                                  # 鸭子类

def fly(self):

print("鸭子沿着地面飞起来了")

class Swan(object):                                  # 天鹅类

def fly(self):

print("天鹅在空中翱翔")

class Plane(object):                                 # 飞机类

def fly(self):

print("飞机隆隆地起飞了")

def fly(obj):                                        # 实现飞的功能函数

obj.fly()

duck = Duck()

fly(duck)

swan = Swan()

fly(swan)

plane = Plane()

fly(plane)

===运行结果:===================================================================================

鸭子沿着地面飞起来了

天鹅在空中翱翔

飞机隆隆地起飞了

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

2. 对象所属的类之间有继承关系(应用更广)

class gradapa(object):

def __init__(self,money):

self.money = money

def p(self):

print("this is gradapa")

class father(gradapa):

def __init__(self,money,job):

super().__init__(money)

self.job = job

def p(self):

print("this is father,我重写了父类的方法")

class mother(gradapa):

def __init__(self, money, job):

super().__init__(money)

self.job = job

def p(self):

print("this is mother,我重写了父类的方法")

return 100

#定义一个函数,函数调用类中的p()方法

def fc(obj):

obj.p()

gradapa1 = gradapa(3000)

father1 = father(2000,"工人")

mother1 = mother(1000,"老师")

fc(gradapa1)            #这里的多态性体现是向同一个函数,传递不同参数后,可以实现不同功能.

fc(father1)

print(fc(mother1))

===运行结果:===================================================================================

this is gradapa

this is father,我重写了父类的方法

this is mother,我重写了父类的方法

100

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

拓展:

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

Java中多态的体现:

① 方法的重载(overload)和重写(overwrite)。

② 对象的多态性(将子类的对象赋给父类的引用)——可以直接应用在抽象类和接口上

广义上:①方法的重载、重写 ②子类对象的多态性

狭义上:子类对象的多态性(在Java中,子类的对象可以替代父类的对象使用)

1

2

3

4

5

6

本文参考了其他博客,并结合自己的认知进行了修正。原文链接

————————————————

版权声明:本文为CSDN博主「tigerlib」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

(0)

相关推荐

  • Python学习—面向对象编程基础篇

    python面向对象编程已经学完了,有必要进行一下记录总结,加深一下理解,不然似懂非懂容易忘记:面向对象的知识点很多,其中面向对象的高级篇:元类,需要另外一篇博客来写,最后还要手撸一个简单版本的ORM ...

  • Python面向对象

    面向对象编程是一种程序设计思想,它把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程与面向对象区别: 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为 ...

  • 关于python中if __name__ == '__main__':的理解

    调试代码的时候都会写上if __name__ == '__main__':,然后写上数据进行调试,一直没有理解到这句的含义,就照搬着写,到现在才算理解到,大概说下自己的见解. 1.在python里__ ...

  • 如何用外行容易理解的语言解释Python中的概念?

    Python编程学习圈 2021-07-30 现如今,编程已经成为一个非常普遍的技能,很多工作中都可以用上.于是,作为程序员,经常会被周围人(比如自己的女朋友)问到关于编程是什么的问题. 今天给大家分 ...

  • 一文理解 Python 中的变量

    " 变量让程序活起来,不再千人一面." 我们在之前的文章<Python 基本数据类型介绍>中了解了如何创建各种基本类型的数据,但是我们的例子中使用的都是"字面 ...

  • python中的other.a怎么理解?

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/python中的other.a怎么理解? 作者:融水公子 rsgz Python3 教程 Python3 教程 http://www.rsgz.t ...

  • 如何理解和使用 Python 中的列表

    原创 马超 DeveloperPython 2017-10-28 阅读本篇大概需要 6 分钟. 昨天写了一篇 我到底有多么努力 之后,收到很多评论和感动. 评论中大多数人都讲到自己也在努力,我也相信只 ...

  • P百科:如何理解 Python 中的装饰器

    昨天 [P百科]:Python 大白话百科全书   每周,痴海会用大白话,讲解一个 Python 中那些难以理解的知识点.   希望通过这样的白话讲解,可以让大家更好的学会 Python.   今天这 ...

  • python中*args和**kwargs的理解

    写在前面   读代码的过程中经常见到这种含*args和*kwargs的表达:   比如这个该输出什么呢? def foo(*args): print(args) foo(1, 2, 3, 4, 5) ...

  • 奇门遁甲中的“月令”怎么理解?它对宫位的影响一定要重视

    奇门遁甲中的“月令”怎么理解?它对宫位的影响一定要重视

  • Python 中的函数装饰器和闭包

    函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另一个函数,称为被装饰函数.装饰器可以修改这个函数再将其返回, ...