Python 类继承详解

这篇具有很好参考价值的文章主要介绍了Python 类继承详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

虽然本人以前总是使用类去写 Python 代码,但是对于模块化确实仍不是特别熟悉,相信有不少小伙伴都会和我一样对 Python 类的继承比较困惑。于是,今天,我决定对它正式动手了。本文我们会着重说明以下四个问题:

  1. 我们为什么需要使用 Python 类的继承
  2. 单继承
  3. 继承中的各种书写形式
  4. 多继承

单继承

示例1

我们将第一个,第二个问题以及第三个问题放在一起说明,先看一段代码:

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

    def area(self):
        return self.length * self.width

    def perimeter(self):
        return 2 * self.length + 2 * self.width


# Here we declare that the Square class inherits from the Rectangle class
class Square(Rectangle):
    def __init__(self, length):
        super().__init__(length, length)


square = Square(4)
print(square.area())
"""
result:
16
"""

可以看到我们通过类的继承使用 Rectangle 类中的 area() 的方法计算了 Square 的面积。那这个计算过程是如何发生的呢?首先,定义好 square 类后,我们通过 def __init__(self, length): 定义了 square 类的初始化类,紧接着我们使用super().__init__(length, length)Rectangle 类中继承了它的初始化方法和类方法。其中的,super() 表示 Square 类的父类,即 Rectangle 类。length,length 表示 Rectangle 类中的初始化方法中的两个参数 length,width 此时用 length, length 替换。最后我们调用 area() 方法,而此时的 area() 方法中的参数已经均成了 length, length,最后我们得到 4 * 4 = 16

上述即是 Python 单继承最常用的用法,也是推荐使用的方法

现在我们可以回答第一个问题了,我们为什么要使用类继承呢?

  1. 可以使得我们省略很多不必要的代码,使得代码更加简洁。
  2. 使得我们定义类对象的性质,且定义子类与父类的关系更加鲜明。
  3. 可以使得我们在子类中调用父类中的方法。
  4. 可以更好的实现代码的模块化。(大工程文件必备)

当然上述代码也有其他书写形式。

示例2

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

    def area(self):
        return self.length * self.width

    def perimeter(self):
        return 2 * self.length + 2 * self.width


# Here we declare that the Square class inherits from the Rectangle class
class Square(Rectangle):
    def __init__(self, length):
        Rectangle.__init__(self, length, length)


square = Square(4)
print(square.area())
"""
result:
16
"""

之前我们提到,super() 实际指代的是 Rectangle 类,因此,我们也可以直接使用 Rectangle.__init__(self, length, length) 来实现类的继承操作。但是需要注意不同于使用 super(),使用 Rectangle.__init__(self, length, length) 时,我们需要将第一个参数设置为 self

示例3

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

    def area(self):
        return self.length * self.width

    def perimeter(self):
        return 2 * self.length + 2 * self.width


# Here we declare that the Square class inherits from the Rectangle class
class Square(Rectangle):
    def __init__(self, length):
        super(Square, self).__init__(length, length)


square = Square(4)
print(square.area())
"""
result:
16
"""

如之前所说,super() 指代的是 Rectangle 类,然后紧跟着的括号中的第一个参数是当前类的名称,即 Square,然后对应的是 Square 类的实例对象,即 self

示例4

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

    def area(self):
        return self.length * self.width

    def perimeter(self):
        return 2 * self.length + 2 * self.width


# Here we declare that the Square class inherits from the Rectangle class
class Square(Rectangle):
    def __init__(self, length):
        super(self.__class__, self).__init__(length, length)


square = Square(4)
print(square.area())
"""
result:
16
"""

可以看到,上述中,我们将 super() 括号中的第一个参数由 super 换成了 self.__class__。事实上,此时的 self.__class__ 指代的就是 square 类。

至此,Python 类单继承的所有常见形式都被提及了。

类扩展

在之前的字类 Square 的基础上,采用类继承我们可以实现类的扩展。

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

    def area(self):
        return self.length * self.width

    def perimeter(self):
        return 2 * self.length + 2 * self.width


class Square(Rectangle):
    def __init__(self, length):
        super(Square, self).__init__(length, length)


class Cube(Square):
    def surface_area(self):
        face_area = super().area()
        return face_area * 6

    def volume(self):
        face_area = super().area()
        return face_area * self.length


cube = Cube(3)
print(cube.surface_area())
print(cube.volume())
"""
result:
54
27
"""

如上述代码所示,我们通过创建 Cube 类对 Square 类进行了扩展。

注意当我们使用第四种形式的时候,会报错,具体原因,暂时不明,前三种形式是可以的。

多继承

即,一个子类从多个父类中继承,通常用不到,这里暂时不做说明,日后如果作者能够遇到,会再来补充。

如果大家觉得有用,就点个赞让更多的人看到吧~文章来源地址https://www.toymoban.com/news/detail-435492.html

到了这里,关于Python 类继承详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++进阶】继承、多态的详解(继承篇)

    作者:爱写代码的刚子 时间:2023.7.28 前言:本篇博客主要介绍C++进阶部分内容——继承,C++中的继承和多态是比较复杂的,需要我们认真去深挖其中的细节。 继承的概念及定义 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序

    2024年02月13日
    浏览(39)
  • 为什么在Python中总是使用【字典】这种类型呢?

    你好,我是安然无虞。 字典 dict 是一个无序、可变和有索引的集合,字典中不允许存在重复的成员。 在Python中, {} 表示一个空字典,同时 dict() 也表示一个空字典。例如: 说明一下: 字典是一种存储键值对的结构,键和值一一对应,根据键就能快速地找到其对应的值。 字

    2024年04月15日
    浏览(62)
  • python pip install 总是报错及解决办法

    情况一 pip 正常安装完成,但是在安装库的时候出现如下界面  运行以下命令来升级pip 情况二  出现这种情况的原因:电脑里面同时存在着两个版本,python2和python3,安装的库在下载的时候找不到对应的版本 解决方法: 指定版本号即可 python -3 -m pip install 安装的库 python -3 -

    2024年02月14日
    浏览(43)
  • 内网使用 python selenium报错,好像总是检查驱动的最新版本

    内网(办公室局域网)环境,使用 python selenium 时报错,好像总是检查驱动的最新版本,但是内网又不通外网,所以总是失败,怎样能禁止检查?试过chrome和Firefox都这样,驱动和浏览器都已经是对应的版本了。另外如果切换到外网环境,就能正常执行。 具体报错如下 Exception

    2024年02月08日
    浏览(44)
  • C++语法——详解虚继承

    目录 一.什么是虚继承 二.虚继承原理 三.虚继承使用注意事项 所谓虚继承(virtual)就是子类中只有一份间接父类的数据。该技术用于解决多继承中的父类为非虚基类时出现的数据冗余问题,即菱形继承问题。 小编用一张图来表述一下: 如果是下图这种非虚继承 ,那么 D类中

    2024年01月16日
    浏览(40)
  • c++继承详解

    前言         继承是类复用的重要方式,学习面向对象语言时学习继承是必不可少的,在c++中继承机制一种较为复杂的机制,下面让我们一起来认识一下c++中的继承。 目录 1.继承的概念和定义         1.1继承的概念         1.2 继承的定义 2.基类和派生类之间的转换 3.继承

    2024年02月07日
    浏览(24)
  • c++:继承(超详解)

    目录 一:什么是继承 二:继承的格式 继承的总结: 二:子类和父类(基类和派生类) 1.子类和父类的相互赋值: 2.同名的成员变量 3.同名成员函数 三:子类中默认的成员函数 1.构造函数 2.析构函数 3.拷贝构造 4.赋值运算符重载  四:单继承和多继承 单继承:  多继承:

    2024年02月02日
    浏览(27)
  • C++之继承<1>【详解】

      继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函

    2024年02月06日
    浏览(28)
  • C++之继承<2>【详解】

      派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。如果基类没有默认的构造函数,则必须在派生类构造函数的初始化列表阶段显示调用。   无论是否显示的调用基类的构造成员函数,都会自动调用基类的默认成员函数: 显示调用后: 上述的后半

    2024年02月08日
    浏览(29)
  • 【C++】继承 -- 详解

    1、 继承的概念 继承   (inheritance) 机制是面向对象程序设计 使代码可以 复用 的最重要的手段,它允许程序员在 保 持原有类特性的基础上进行扩展 ,增加功能,这样产生新的类,称 派生类 。 继承 呈现了面向对象 程序设计的层次结构 ,体现了由简单到复杂的认知过程。以

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包