一、函数多态
函数多态是指在不同的参数下,函数可以表现出不同的行为。也就是说,函数的功能不只仅与函数本身相关,还与传入的参数相关。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对象传入该函数,都可以正常执行。这就是鸭子类型的多态表现,只要对象具有相同的方法,就可以视为同一种类型。