Python多态的三种表现形式(python多态的三种表现形式)

一、函数多态

函数多态是指在不同的参数下,函数可以表现出不同的行为。也就是说,函数的功能不只仅与函数本身相关,还与传入的参数相关。Python的动态类型特性使得实现函数多态非常容易。以下是一个计算两个数之和的函数:

def add(a, b):
    return a + b

当我们传入两个整数相加:

add(1, 2)

结果返回3。当我们传入两个字符串相加:

add('hello', 'world')

结果返回helloworld。通过传入不同的参数,这个函数可以实现不同的功能,这就是Python函数的多态表现。

二、类(静态)多态

类多态是指在不同的对象下,同一个方法可以表现出不同的行为。也就是说,方法的功能不只与方法本身相关,还与对象类型相关。以下是一个计算图形面积的示例:

class Shape:
    def calculate_area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def calculate_area(self):
        return self.width * self.height

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def calculate_area(self):
        return 3.14 * self.radius * self.radius

这里我们定义了一个Shape基类,它有一个calculate_area方法。然后我们定义了Rectangle和Circle两个子类,它们都继承了Shape类。这两个子类都实现了自己的calculate_area方法,分别计算了矩形和圆形的面积。这样,我们就可以通过不同的对象调用同一个方法,来实现不同的功能。比如:

r = Rectangle(10, 20)
print(r.calculate_area())

c = Circle(5)
print(c.calculate_area())

结果分别返回200和78.5。通过这种方式实现了类的多态表现。

三、鸭子类型的多态

鸭子类型的多态是指只要对象具有相同的方法,就可以视为同一种类型。也就是说,不需要继承同一个基类或接口,只需要具有相同的方法即可。以下是一个简单的示例:

class Duck:
    def quack(self):
        print('quack')

class Person:
    def quack(self):
        print('quack like a duck')

def in_the_forest(obj):
    obj.quack()

duck = Duck()
person = Person()

in_the_forest(duck)
in_the_forest(person)

这里我们定义了一个Duck类和一个Person类,分别实现了quack方法。然后我们定义了一个函数in_the_forest,它有一个参数obj,代表一个对象。这个函数调用了obj的quack方法。我们将Duck对象和Person对象传入该函数,都可以正常执行。这就是鸭子类型的多态表现,只要对象具有相同的方法,就可以视为同一种类型。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平