Python类继承及super()函数使用说明

 更新时间:2022年11月24日 09:12:45   作者:waifdzdn  
这篇文章主要介绍了Python类继承及super()函数使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Python中单类继承

Python是一门面向对象的编程语言,支持类继承。

新的类称为子类(Subclass),被继承的类称为父类、基类或者超类。子类继承父类后,就拥有父类的所有特性。

类继承的简单例子:

普通类方法继承

class Fruit():
    def color(self):
        print("colorful")

class Apple(Fruit):
    pass

class Orange(Fruit):
    pass

apple = Apple()
orange = Orange()
apple.color()
orange.color()

# 输出
# colorful
# colorful

这里Fruit为父类,Apple和Orange为子类,子类继承了父类的特性,因此Apple和Orange也拥有Color方法。

子类除了可以继承父类的方法,还可以覆盖父类的方法:

class Fruit():
    def color(self):
        print("colorful")

class Apple(Fruit):
    def color(self):
        print("red")

class Orange(Fruit):
    def color(self):
        print("orange")

apple = Apple()
orange = Orange()
apple.color()
orange.color()

# 输出
# red
# orange

子类可以在继承父类方法的同时,对方法进行重构。

这样一来,子类的方法既包含父类方法的特性,同时也包含子类自己的特性:

class Fruit():
    def color(self):
        print("Fruits are colorful")

class Apple(Fruit):
    def color(self):
        super().color()
        print("Apple is red")

class Orange(Fruit):
    def color(self):
        super().color()
        print("Orange is orange")

apple = Apple()
orange = Orange()
apple.color()
orange.color()

# 输出
# Fruits are colorful
# Apple is red
# Fruits are colorful
# Orange is orange

初始化函数继承

如果我们需要给类传入参数,需要使用初始化函数。如果所有子类中部分参数是相同的,那么可以在父类的初始化函数中定义这些参数,然后子类继承父类的初始化函数,这样所有子类就可共享这些参数,而不需要在每个子类中单独定义。

初始化函数的继承:

class Fruit():
    def __init__(self, color, shape):
        self.color = color
        self.shape = shape

class Apple(Fruit):
    def __init__(self, color, shape, taste):
        Fruit.__init__(self, color, shape) # 等价于super().__init__(color, shape)
        self.taste = taste
    
    def feature(self):
        print("Apple's color is {}, shape is {} and taste {}".format(
            self.color, self.shape, self.taste))

class Orange(Fruit):
    def __init__(self, color, shape, taste):
        Fruit.__init__(self, color, shape)
        self.taste = taste
    
    def feature(self):
        print("Orange's color is {}, shape is {} and taste {}".format(
            self.color, self.shape, self.taste))

apple = Apple("red", "square", "sour")
orange = Orange("orange", "round", "sweet")
apple.feature()
orange.feature()

# 输出
# Apple's color is red, shape is square and taste sour
# Orange's color is orange, shape is round and taste sweet

Python中多类继承

在单类继承中,super()函数用于指向要继承的父类,且不需要显式的写出父类名称。

但是在多类继承中,会涉及到查找顺序(MRO)、钻石继承等问题。

MRO 是类的方法解析顺序表, 也就是继承父类方法时的顺序表。

钻石继承

    A
   / \
  B   C
   \ /
    D

如图所示,A是父类,B和C继承A,D继承B和C。

下面举例说明钻石继承的继承顺序

class Plant():
    def __init__(self):
        print("Enter plant")
        print("Leave plant")

class Fruit(Plant):
    def __init__(self):
        print("Enter Fruit")
        super().__init__()
        print("Leave Fruit")

class Vegetable(Plant):
    def __init__(self):
        print("Enter vegetable")
        super().__init__()
        print("Leave vegetable")

class Tomato(Fruit, Vegetable):
    def __init__(self):
        print("Enter Tomato")
        super().__init__()
        print("Leave Tomato")

tomato = Tomato()
print(Tomato.__mro__)


# 输出
# Enter Tomato
# Enter Fruit
# Enter vegetable
# Enter plant
# Leave plant
# Leave vegetable
# Leave Fruit
# Leave Tomato
# (<class '__main__.Tomato'>, <class '__main__.Fruit'>, <class '__main__.Vegetable'>, <class '__main__.Plant'>, <class 'object'>)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Python的Dataframe取两列时间值相差一年的所有行方法

    使用Python的Dataframe取两列时间值相差一年的所有行方法

    今天小编就为大家分享一篇使用Python的Dataframe取两列时间值相差一年的所有行方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python 获取异常(Exception)信息的几种方法

    Python 获取异常(Exception)信息的几种方法

    这篇文章主要介绍了Python 获取异常(Exception)信息的几种方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • python编程学习np.float 被删除的问题解析

    python编程学习np.float 被删除的问题解析

    这篇文章主要为大家介绍了python编程学习np.float 被删除的问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 使用Python实现一键往Word文档的表格中填写数据

    使用Python实现一键往Word文档的表格中填写数据

    在工作中,我们经常遇到将Excel表中的部分信息填写到Word文档的对应表格中,以生成报告,方便打印,所以本文小编就给大家介绍了如何使用Python实现一键往Word文档的表格中填写数据,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12
  • Selenium结合BeautifulSoup4编写简单的python爬虫

    Selenium结合BeautifulSoup4编写简单的python爬虫

    这篇文章主要介绍了Selenium结合BeautifulSoup4编写简单的python爬虫,帮助大家更好的理解和学习python 爬虫的相关知识,感兴趣的朋友可以了解下
    2020-11-11
  • python文本数据处理学习笔记详解

    python文本数据处理学习笔记详解

    这篇文章主要为大家详细介绍了python文本数据处理学习笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Python的历史与优缺点整理

    Python的历史与优缺点整理

    在本篇文章里小编给大家分享的是关于Python优缺点及基础知识点整理内容,有需要的朋友们可以参考下。
    2020-05-05
  • Python表格处理模块xlrd在Anaconda中的安装方法

    Python表格处理模块xlrd在Anaconda中的安装方法

    本文介绍在Anaconda环境下,安装Python读取.xls格式表格文件的库xlrd的方法,xlrd是一个用于读取Excel文件的Python库,本文介绍了xlrd库的一些主要特点和功能,感兴趣的朋友一起看看吧
    2024-04-04
  • Python 中的lambda函数介绍

    Python 中的lambda函数介绍

    Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),这篇文章主要介绍了Python lambda函数的基础知识,需要的朋友可以参考下
    2018-10-10
  • Pycharm关于远程JupyterLab以及JupyterHub登录问题

    Pycharm关于远程JupyterLab以及JupyterHub登录问题

    这篇文章主要介绍了Pycharm关于远程JupyterLab以及JupyterHub登录问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论