Python中鸭子类型与多态介绍

向量数据库大模型机器学习
鸭子类型是Python中一种独特的编程方式,指的是一种动态类型的概念(只要一只动物走路像鸭子,叫声像鸭子,那么它就可以被当做鸭子使用)。  

这意味着在Python中,您可以使用多个不同的类对象来执行相同的操作,只要它们具有相同的方法和属性即可。

多态是面向对象的编程语言的三大特性(封装、继承、多态)之一,它指的是通过不同的对象表现出相同的行为方式。具有多态特性的语言可以将同一方法应用于不同的对象,从而可以通过不同的子类实现相同的接口来处理不同的行为。

比如,在Python中,动物类Animal有一个say()方法,而狗子类Dog和猫子类Cat分别重写了这个say()方法,并且可以使用相同的方法名称调用它来表现出不同的行为。

具体的代码如下:

  
class Animal:  
 def say(self):  
 print("我是一只动物,我会叫")  
  
  
class Cat(Animal):  
 def say(self):  
        print("我是一只猫,我是这样叫的:喵喵喵")  
  
  
class Dog(Animal):  
 def say(self):  
 print("我是一只猫,我是这样叫的:汪汪汪")  
  
  
animal = Cat()  
animal.say() # 喵喵喵  
  
animal = Dog()  
animal.say() # 汪汪汪  

运行结果:

picture.image

以上代码展示了如何使用多态实现“  **同一个方法在不同类中产生不同的结果** ”的效果。在该示例中,我们定义了一个 Animal 类,其中包含一个 say() 方法。然后我们创建了两个子类 Cat 和 Dog,这两个子类都重写了基类中的 say() 方法。

在测试代码中,我们首先将 animal 对象初始化为 Cat 类的一个实例。然后我们调用这个实例的 say() 方法,实际上调用了 Cat 类中重写后的 say() 方法,并打印出 "我是一只猫,我是这样叫的:喵喵喵"。然后,我们将 animal 对象重置为 Dog 类的一个实例,并再次调用它的 say() 方法,这次实际调用的是 Dog 类中重写后的 say() 方法,并打印出 "我是一只狗,我是这样叫的:汪汪汪"。

这个示例说明了, 即使在基类中定义了一个方法,派生类也可以覆盖该方法并实现自己的逻辑。这是实现多态的一个非常基本且重要的原则 。通过多态机制,我们可以写出更加灵活和易于扩展的程序。

接下来再看一下,把类当做变量的一个用法,这个是我之前没怎么关注过的:

  
class Cat(object):  
 def say(self):  
 print("我是一只猫,喵喵喵")  
  
  
class Dog(object):  
 def say(self):  
 print("我是一只猫,汪汪汪")  
  
  
animal_list = [Cat, Dog]   
  
for animal in animal_list:  
 animal().say()  

以上代码中,第11行中的Cat, Dog在列表中都会被当做变量,只有在第14行被实例化之后,才会明确Cat, Dog是某个class类。

Pycharm集成环境以及常见小技巧

Python简介以及解释器介绍

Python报错--ValueError: check_hostname requires server_hostname

Python踩过的坑--ModuleNotFoundError: No module named 'xxx'

Python基础语法之输入输出、基本数据类型介绍

Python中使用for循环遍历操作时容易踩的坑

python高级用法之命名元组namedtuple

一篇文章为你揭秘pytest的基本用法

Anaconda-一个开源的Python发行版本

Python脚本读取Consul配置信息

Python3.10版本的新特性介绍

Python中使用pickle库进行数据的序列化存储

Python小知识-函数传参怎么设置期望的传参类型?

python解析xml遇到的问题分享(命名空间有关)

分享一下最近使用python字典取值用法的收获

Python里面怎么判断某个字符串是否包含列表中的某一个元素

Python中列表的extend()方法介绍

点击上面文字添加关注! 推荐指数★★★★★

最近准备组建各种打卡学习,有兴趣的小伙伴可以微信(xiaobotester)私聊一起学习。

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生机器学习系统落地和实践
机器学习在字节跳动有着丰富业务场景:推广搜、CV/NLP/Speech 等。业务规模的不断增大对机器学习系统从用户体验、训练效率、编排调度、资源利用等方面也提出了新的挑战,而 Kubernetes 云原生理念的提出正是为了应对这些挑战。本次分享将主要介绍字节跳动机器学习系统云原生化的落地和实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论