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日
    浏览(37)
  • 为什么在Python中总是使用【字典】这种类型呢?

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

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

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

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

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

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

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

    2024年01月16日
    浏览(39)
  • (java)继承和多态 (详解)

    目录 1 继承 1.1为什么需要继承 1.2 继承概念 1.3 继承的语法 1.4 父类成员访问  1.4.1 子类中访问父类的成员变量 1.4.2 子类中访问父类的成员方法   1.5 super 1.6 子类构造方法 1.7 super和this 1.7.1 this 1.7.2 super和this  1.8 再谈初始化 1.9 继承方式 1.10 继承与组合 2 多态 2.1 多态

    2024年02月03日
    浏览(40)
  • Java继承详解

    目录 继承 为什么需要继承 继承的概念 继承的语法 父类成员的访问 子类中访问父类的成员变量 1.子类和父类不存在同名的成员变量 2.子类和父类成员变量同名 子类中访问父类的成员方法 1.成员方法名字不同 2.成员方法名字相同 super 子类构造方法 super和this 再谈初始化

    2024年02月13日
    浏览(31)
  • Java---继承详解

    1 继承的含义         继承 :就是子类继承父类的 属性 和 行为 ,使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的 非私有 的属性和行为。 2 继承的好处 提高 代码的复用性 (。 使类与类之间产生了关系。 通过 extends ,可以

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

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

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

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

    2024年02月06日
    浏览(25)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包