简单分享下python多态

目录:

        一、多态是啥嘞(龙生九子各有不同,这就是多态)

        二、基础的实例

        三、多态的优势与应用场景

        四、深入理解

一、多态是啥嘞(龙生九子各有不同,这就是多态)

多态(Polymorphism),顾名思义,就是多种形态。

在面向对象编程(OOP)中,它指的是允许你使用一个接口来表示不同的类型的能力。简单来说,就是同一种行为可以根据发送消息的对象的不同而采用不同的行为方式。

比如,动物园里有各种动物,它们都有“叫”的能力,但是每种动物叫的方式不同。狗会“汪汪”,猫会“喵喵”。如果我们设计一个“动物”类,并让每种动物都继承这个类,然后定义一个“叫”的方法,就能实现多态。

在Python这样的动态语言中,多态的实现尤为自然和灵活,因为Python是基于“鸭子类型”(Duck Typing)的,关注的是“是不是能做某事”,而不是“是什么”。

二、基础的实例

# 定义一个基础的动物类
class Animal:
    def speak(self):
        pass

# 狗类继承动物类,重写speak方法
class Dog(Animal):
    def speak(self):
        return "汪汪"

# 猫类同样继承动物类,重写speak方法
class Cat(Animal):
    def speak(self):
        return "喵喵"

def animal_sound(animal):
    # 不管传入什么动物,只要它能speak就行
    print(animal.speak())

# 实例化并调用
dog = Dog()
cat = Cat()

animal_sound(dog)  # 输出: 汪汪
animal_sound(cat)  # 输出: 喵喵

在这个例子中,animal_sound函数并不关心是什么类型的动物,什么动物都有叫的能力,只要它有一个speak方法就可以。这就是多态的魅力,每个动物都能发出他们不同的叫的动作——通过统一的接口来处理不同的对象类型。

三、多态的优势与应用场景

1、代码复用与扩展性:多态通过提供一个通用的交互界面,使得针对不同对象类型的操作能够集中处理,从而避免了为每个具体类型编写重复的控制逻辑。

在上述示例中,多态减少了代码重复,使得添加新的动物种类时,无需修改已有的函数,只需增加新的子类即可。

2、提高工作效率:在大型项目中,多态能够帮助我们快速定位和修改问题,减少因类型检查而导致的错误,使开发更加高效。

3、实际应用场景

  • GUI编程:按钮、文本框等控件都可能需要响应“点击”事件,尽管它们的行为细节不同,但都可以通过相同的接口来处理事件。

  • 数据处理框架:如Pandas库,无论是DataFrame还是Series,都可以通过.apply()方法应用自定义函数,这是多态在实际库中的体现。

  • Web框架:如Django的视图函数可以处理不同类型的请求,只要这些请求符合预期的接口规范。

四、深入理解

为了更好地利用多态,Python提供了abc模块,用于定义抽象基类(Abstract Base Class, ABC)。抽象基类不能被实例化,其目的是为子类提供一个必须实现的接口规范。

from abc import ABC, abstractmethod

class AbstractAnimal(ABC):
    @abstractmethod
    def speak(self):
        pass

# 如果不实现speak方法,Dog类将无法实例化
class Dog(AbstractAnimal):
    def speak(self):
        return "汪汪"

# 尝试实例化未实现speak的类会报错
# class SilentAnimal(AbstractAnimal):
#     pass

# animal = SilentAnimal()  # 这里会报TypeError

好啦啦啦,今天的分享就到这里了,有喜欢的哥哥姐姐们,欢迎大家留言指点^_^如果本文对你有帮助,请点赞、转发哦

  • 36
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小软件大世界

谢谢支持,我将会更加努力的寻找

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值