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()  # 汪汪汪

运行结果:

2a206b1f49bd356f7928265cae7ac820.png

    以上代码展示了如何使用多态实现“同一个方法在不同类中产生不同的结果”的效果。在该示例中,我们定义了一个 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类。

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

猜你喜欢

转载自blog.csdn.net/liboshi123/article/details/129891601
今日推荐