Python入门知识点分享——(二十)继承和方法重写

今天是大年三十,祝大家龙年大吉,当然无论何时何地,我们都不要忘记继续学习。今天介绍的是继承和方法重写这两种面向对象编程特点。继承机制指的是,一个类(我们称其为子类或派生类)可以使用另一个类(我们称其为父类或基类)的属性和方法。这种继承的方式可以简化代码的编写,并且提供了代码复用的机制。只需要在子类名称后用括号加上父类名称就可以达到继承效果。

class Fruit:

    def __init__(self, kind):
        self.kind = kind

    def talk(self):
        print('我爱吃'+self.kind)

apple = Fruit('苹果')
print(apple.talk())

class Dinner(Fruit):

    def __init__(self, kind):
        Fruit.__init__(self, kind)

    def share(self):
        Fruit.talk(self)
        print(self.kind+"作为晚餐分享给大家")

apple = Dinner('苹果')
print(apple.share())

示例中的Fruit就是父类,而Dinner则是子类,Dinner类的初始化方法继承了Fruit类的初始化方法,而share方法也继承了Fruit类的talk方法,语法结构是父类.方法名(形参)。

我爱吃苹果
None
我爱吃苹果
苹果作为晚餐分享给大家
None

需要注意输出语句中的None是因为函数没有明确的返回语句,将print改成return即可解决,提醒大家在编写类时一定要注意返回值。

class Fruit:

    def __init__(self, kind):
        self.kind = kind

    def talk(self):
        return '我爱吃'+self.kind

apple = Fruit('苹果')
print(apple.talk())

class Dinner(Fruit):

    def __init__(self, kind):
        Fruit.__init__(self, kind)

    def share(self):
        Fruit.talk(self)
        return self.kind+"作为晚餐分享给大家"

apple = Dinner('苹果')
print(apple.share())
我爱吃苹果
苹果作为晚餐分享给大家

在pycharm编译器中继承的父类会有这样的标识,点击即可访问所对应的子类。

方法重写是用在从父类继承的方法不能满足子类需求的情况,为了增强泛用性,我们可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写。 重写的实现过程很简单,只需要将同名的方法在子类中重新编辑成自己想要的代码即可。

class Fruit:

    def __init__(self, kind):
        self.kind = kind

    def talk(self):
        return '我爱吃'+self.kind

class Dinner(Fruit):

    def __init__(self, kind):
        Fruit.__init__(self, kind)

    def talk(self):
        return self.kind+"作为晚餐"

watermelon = Dinner('西瓜')
print(watermelon.talk())
西瓜作为晚餐

可能有同学会问,那这样我换一个函数名不就行了吗,重写的意义在哪呢。实际上重写还要与super函数配合才能最大化效果,super函数能在子类重写父类方法的情况下重新调用父类,达到依次细分执行的效果。

class Fruit:

    def __init__(self, kind):
        self.kind = kind

    def talk(self):
        print('我爱吃'+self.kind)

class Dinner(Fruit):

    def __init__(self, kind):
        Fruit.__init__(self, kind)

    def talk(self):
        super().talk()
        return self.kind+"作为晚餐"

watermelon = Dinner('西瓜')
print(watermelon.talk())
我爱吃西瓜
西瓜作为晚餐

要注意父类的return可能会和子类的return冲突,在这种情况下我们将父类的返回值取消改为直接输出。

重写的标识是向上的红箭头,要和向下灰箭头的继承区分开来。

继承和重写的知识就介绍到这里,我们下期再见。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-10 08:42:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-10 08:42:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-10 08:42:02       87 阅读
  4. Python语言-面向对象

    2024-02-10 08:42:02       96 阅读

热门阅读

  1. 微信小程序:父组件调用子组件的方法

    2024-02-10 08:42:02       49 阅读
  2. itextpdf使用:使用PdfReader添加图片水印

    2024-02-10 08:42:02       55 阅读
  3. MyBatis-Plus 实现分页

    2024-02-10 08:42:02       48 阅读
  4. Lua metatable & metamethod

    2024-02-10 08:42:02       54 阅读
  5. 力扣热题100_双指针_283_移动零

    2024-02-10 08:42:02       60 阅读
  6. 力扣-260. 只出现一次的数字 III

    2024-02-10 08:42:02       46 阅读
  7. 2.8 假期作业

    2024-02-10 08:42:02       46 阅读