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

————————————————
版权声明:本文为CSDN博主「tigerlib」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44695969/article/details/92175840

原文地址:https://www.cnblogs.com/sidianok/p/11784947.html

时间: 2024-11-01 15:59:57

Python中的多态如何理解?(转帖,让我很理解。)的相关文章

python中的多态

# -*- coding: cp936 -*- #python 27 #xiaodeng #python中的多态 #多态:一个操作的意义取决于被操作对象的类型,相同的消息给予不同的对象会引发不同的动作. #多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式 #在处理多态对象时,只需要关注他的接口即可 #同一个操作作用于不同的对象,可以有不同的解释,产生不同的执行结果. #多态案例1 #同样的+号可以用不同的对象相加,体现了多态的功能 print 1+2 print 'h

python 中的多态

动态语言的多态和静态语言c++等多态含义不太一样,c++中的多态就是参数数量和类型不同的方法就是不同方法,而动态语言中的多态其实值的是方法的寻找过程,即向右找到类(或者单件类),在类中找不到的话再找父类,一直在祖先链中找到或者找不到为止,先找到的就被调用: class MyClass(object): def fn(x): print ("This is the first fn") def fn(x,y): print ("This is the second fn&quo

关于python中同步、异步,阻塞、非阻塞的理解

同步.异步,阻塞.非阻塞的理解 异步:某个事情需要10秒.而我只需要调用一个函数帮我做,我可以干 其他的事情.(比如调用celery) 同步:某个事情需要10秒完成,我等他完成之后再继续后面的工作. 举例:金拱门排队取餐 第一种方式(同步),下单拿号之后自己排队取餐. 第二种方式(异步),下单之后可以坐在一旁等待叫号,等待事件触发. 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务,等待当前函数返回. 阻塞调用和同步调用不同点: 对于同步调用来说,很

python之面向对象中的多态

直接看代码: class Dog: def __init__(self,name): self.name = name def play(self): print("%s在汪汪汪" % self.name) class SonDog(Dog): def play(self): print("%s不仅会汪,还会飞" % self.name) class Person: def __init__(self,name): self.name = name def game

关于python中的特殊方法

研究了几个小时,大概对python中的特殊方法一知半解,现在写写自己的理解,以及记录一些找到的资源.待自己有比较深入理解的时候,再来更新 https://docs.python.org/3/reference/datamodel.html#special-method-names 有一篇文章是要必须推荐给读者阅读的:Python Attributes and Methods(http://www.cafepy.com/article/python_attributes_and_methods/p

Python中的可变参数和关键字参数

刚开始接触 python 的时候,对 python 中的 *wargs (可变参数) 和 **kwargs (关键字参数)的理解不是很透彻,看了一下 <Explore Python>一书,里面对这一部分的描述相对浅显易懂, 这里依据个人理解进行相关总结. 可变参数(*args) 对于可变参数可以联想到 C# 中的可变参数.可变参数是一个数量不确定的列表集合,可以是 list 类型,也可以是 tuple 类型 我们定义如下代码段: def add(*numbers): print(type(nu

Python面向对象特性 - 多态

Python中的多态 多态 多态指的是一类事物有多种形态.多态的实现需要依赖于继承~ import abc class File(metaclass=abc.ABCMeta): @abc.abstractmethod def read(self): pass @abc.abstractmethod def write(self): pass class Txt(File): # 文本数据的读写 def read(self): print('读取文本数据') def write(self): pr

《python解释器源码剖析》第3章--python中的字符串对象

3.0 序 我们知道python中的字符串属于变长对象,当然和int也是一样,底层的结构体实例所维护的数据的长度,在对象没有定义的时候是不知道的.当然如果是python2的话,底层PyIntObject维护的就是一个long,显然在没创建的时候就知道是1. 可变对象维护的数据的长度只能在对象创建的时候才能确定,举个例子,我们只能在创建一个字符串或者列表时,才知道它们所维护的数据的长度,在此之前,我们对此是一无所知的. 注意我们在前面提到过可变对象和不可变对象的区别,在变长对象中,实际上也可以分为

【转】浅析python 中__name__ = &#39;__main__&#39; 的作用

原文链接:http://www.jb51.net/article/51892.htm 举例说明解释的非常清楚,应该是看到的类似博文里面最简单的一篇: 这篇文章主要介绍了python 中__name__ = '__main__' 的作用,对于初学者来说很有帮助,需要的朋友可以参考下 很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main__