前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python面向对象编程-多态的概念和使用

Python面向对象编程-多态的概念和使用

原创
作者头像
玖叁叁
发布2023-04-19 08:51:51
2740
发布2023-04-19 08:51:51
举报
文章被收录于专栏:玖叁叁

简介

在面向对象编程中,多态是一个非常重要的概念。多态可以让不同的对象以相同的方式进行操作,从而增强了代码的灵活性和可重用性。

多态的概念

多态是指同一个方法名可以在不同的对象上有不同的实现。也就是说,如果有多个类都继承了同一个父类,并且这些类都实现了同一个方法,那么我们可以在不知道对象具体类型的情况下调用这个方法,因为不同类型的对象都可以通过这个方法来实现自己的功能。

多态的原理

多态的原理是基于继承和重写的。当一个类继承另一个类时,它会继承父类的所有方法和属性。但是如果子类想要改变父类中的某个方法的行为,可以通过重写这个方法来实现。这样,当我们在调用这个方法时,子类中的方法会被执行,而不是父类中的方法。

多态的使用

在Python中,多态可以通过函数和类来实现。我们来看一个使用函数实现多态的示例:

代码语言:javascript
复制
class Dog:
    def sound(self):
        print("汪汪!")

class Cat:
    def sound(self):
        print("喵喵!")

def make_sound(animal):
    animal.sound()

dog = Dog()
cat = Cat()

make_sound(dog)  # 输出 "汪汪!"
make_sound(cat)  # 输出 "喵喵!"

在上面的代码中,我们定义了两个类 DogCat,它们都实现了 sound 方法。然后,我们定义了一个函数 make_sound,它接受一个参数 animal,并调用这个参数的 sound 方法。最后,我们分别创建了一个 Dog 和一个 Cat 的对象,并分别将它们作为参数传递给 make_sound 函数。

由于 DogCat 都实现了 sound 方法,因此它们都可以作为 make_sound 函数的参数。在 make_sound 函数内部,我们调用了 animal.sound() 方法,这个方法会根据 animal 的具体类型来调用 Dog 或者 Cat 中的 sound 方法。因此,当我们将 dog 作为参数传递给 make_sound 函数时,它会输出 "汪汪!",而当我们将 cat 作为参数传递给 make_sound 函数时,它会输出 "喵喵!"。

除了函数,我们还可以使用类来实现多态。例如:

代码语言:javascript
复制
class Shape:
    def area(self):
        pass

class Square(Shape):
    def __init__(self, side):
        self.side = side

    def area(self):
        return self.side * self.side

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

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

shapes = [Square(5), Circle(7)]
for shape in shapes:
    print(shape.area())

在上面的代码中,我们定义了一个抽象类 Shape,它有一个 area 方法,但是这个方法并没有具体的实现。然后,我们定义了两个子类 SquareCircle,它们都继承了 Shape 类,并且实现了自己的 area 方法。在 Square 类中,我们传入正方形的边长,并计算出正方形的面积;在 Circle 类中,我们传入圆形的半径,并计算出圆形的面积。

然后,我们创建了一个列表 shapes,它包含两个对象,一个是正方形,一个是圆形。然后,我们使用 for 循环遍历这个列表,并调用每个对象的 area 方法,这个方法会根据对象的类型来调用 Square 或者 Circle 中的 area 方法,从而计算出不同的面积。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 多态的概念
  • 多态的原理
  • 多态的使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档