广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 面向对象之继承
  • 929
分享到

python 面向对象之继承

python开发语言 2023-09-01 17:09:49 929人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 前言继承的概念单继承多继承子类重写父类的同名方法和属性子类调用父类同名的方法和属性多层继承私有权限 前言 前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大

在这里插入图片描述

文章目录

前言

前面我们已经学习python 面向对象的类和对象,那么今天我将为大家分享面向对象的三大特性之一:继承。

继承具有以下特性:

  1. 代码重用:继承允许我们创建一个新的类,并从一个或多个现有的类中继承属性和方法。这使得我们可以避免重复编写相同的代码,提高代码的重用性。通过继承,我们可以在基类的基础上构建更特定和具体的子类。

  2. 扩展功能:通过继承,我们可以在基类的基础上添加新的属性和方法,以实现对基类功能的扩展。这样,我们可以在不修改基类代码的情况下,通过子类来定制或扩展特定的行为。这种灵活性使得我们能够轻松地适应不断变化的需求。

  3. 组织和抽象概念:通过继承,我们可以组织类之间的关系,并以更抽象的方式来表达概念和逻辑。通过将共同的属性和方法放在基类中,我们可以更清晰地表达类之间的关系和层次结构。这种抽象化的设计能够提高代码的可读性和可维护性。

  4. 实现多态性:继承也为实现多态性(Polymorphism)提供了基础。多态性是面向对象编程中非常重要的概念,它可以让我们使用统一的方式处理不同的对象类型。通过继承,我们可以创建不同的子类,它们共享相同的基类接口,但可能有不同的实现方式。这样,我们可以根据具体的对象类型来调用适当的方法,实现更灵活和可扩展的程序设计。

学习好了继承,可以为后面的抽象和多态打好基础,那么就由我带领大家走进 Python 继承的世界吧。🚗🚗🚗

继承的概念

在生活中,继承通常是指子女继承父母的财产。但是在 python 中稍有区别,两个具有一定关系的子类和父类,子类会继承父类的所有除了私有的属性和方法。我们可以访问以及修改继承来的属性和方法。

在 python 中使用 class 子类名(父类名): 来表示继承关系。

class Animal():    def __init__(self):        self.info = '动物'    def func(self):        print(f'属于{self.info}')class Cat(Animal):    pass  # 这里pass是占位符,防止报错cat = Cat()cat.func()  # 属于动物

继承可以很大程度的提高代码的复用率,提高代码的简洁性。

在python中,其实每一个类都默认继承一个 object 基类

单继承

一个类可以只继承一个类,这种继承关系叫做单继承。

class Master():    def __init__(self):        self.wuGong = '太极'    def func(self):        print(f'身怀绝技:{self.wugong}')class Prentice(Master):    passzhangsan = Prentice()zhangsan.func()  # 身怀绝技:太极

多继承

一个类也可以继承多个父类,这种继承关系叫做多继承。

class Master2():    def __init__(self):        self.wugong = '闪电五连鞭'    def func(self):        print(f'身怀绝技:{self.wugong}')class Prentice(Master1,Master2):    passzhangsan = Prentice()zhangsan.func()

在这里插入图片描述
当我们一个继承多个父类的时候,如果没有特地指明,默认使用第一个继承的父类的属性和方法。

如果我们想要查看该类的继承关系,我们可以使用 __mro__ 来查看继承关系。

print(Prentice.__mro__)

在这里插入图片描述

子类重写父类的同名方法和属性

子类继承父类的属性和方法,不可能原封不动的继承,子类也可以具有自己的特性。那么这里就需要用到 重写 的方法了。

class Master1():    def __init__(self):        self.wugong = '太极'    def func(self):        print(f'身怀绝技:{self.wugong}')class Master2():    def __init__(self):        self.wugong = '闪电五连鞭'    def func(self):        print(f'身怀绝技:{self.wugong}')class Prentice(Master1,Master2):    def __init__(self):        self.wugong = '太极+轻功'    def func(self):        print(f'身怀绝技:{self.wugong}')zhangsan = Prentice()zhangsan.func()  # 身怀绝技:太极+轻功

子类调用父类同名的方法和属性

当我们在子类中调用和父类具有相同名字的属性和方法的时候,默认会调用子类具有的属性和方法。

class Master1():    def __init__(self):        self.wugong = '太极'    def func(self):        print(f'身怀绝技:{self.wugong}')class Master2():    def __init__(self):        self.wugong = '闪电五连鞭'    def func(self):        print(f'身怀绝技:{self.wugong}')class Prentice(Master1,Master2):    def __init__(self):        self.wugong = '火星大力拳'    def func(self):        print(f'身怀绝技:{self.wugong}')zhangsan = Prentice()zhangsan.func()  # 身怀绝技:火星大力拳

那么如果我们要在父类中调用具有同名的父类的属性和方法该怎么做呢?

  • 如果是先调用了父类的属性和方法,父类的属性和方法会覆盖子类的属性和方法,所以如果我们想要使用子类自己的属性和方法,需要调用子类自己的初始化方法。
  • 如果我们想要在子类中调用父类的属性和方法,我们也需要先调用父类的初始化方法。

先调用父类的初始化方法,然后再使用 父类类名.方法(self) 来调用父类的方法。

class Master():    def __init__(self):        self.wugong = '太极'    def func(self):        print(f'身怀绝技:{self.wugong}')class Prentice(Master):    def __init__(self):        self.wugong = '闪电五连鞭'    def func(self):        print(f'身怀绝技:{self.wugong}')    def func1(self):        Master.__init__(self)  # 调用父类的初始化方法        Master.func(self)    def func2(self):        self.func()zhangsan = Prentice()zhangsan.func1()zhangsan.func2()

在这里插入图片描述

当我们在子类中调用父类的初始化方法或者方法的时候,函数的参数列表必须加上 self ,否则就会报错。

当我们在子类中先调用父类的属性和方法的时候,再调用同名的子类自己的方法的时候,如果没有先调用子类自己的初始化方法,我们会发现会使用父类的属性和方法。

    def func2(self):        self.__init__()        self.func()        zhangsan = Prentice()zhangsan.func1()zhangsan.func2()

在这里插入图片描述

我们还可以使用 super() 来调用父类的方法和属性。但是这种 super() 只能调用子类的直接父类,不能调用简介的父类,如果想要调用简介父类,需要在直接父类的方法中使用 super()

super(当前类名,self).函数名

当然super里面的参数也可省略。

class Master():    def __init__(self):        self.wugong = '太极'    def func(self):        print(f'身怀绝技:{self.wugong}')class Prentice(Master):    def __init__(self):        self.wugong = '闪电五连鞭'    def func(self):        print(f'身怀绝技:{self.wugong}')    def func1(self):        super().__init__()        super().func()zhangsan = Prentice()zhangsan.func1()  # 身怀绝技:太极

使用 super() 后面的函数参数列表不需要条件self

多层继承

多层继承是指一个子类继承自另一个子类,而该子类又继承自另一个父类的情况。通过多层继承,可以在类之间形成层次结构,使得子类可以继承和重用祖先类的属性和方法。

# 定义基类Aclass A:    def method_A(self):        print("This is method A")# 定义中间类B,继承自基类Aclass B(A):    def method_B(self):        print("This is method B")# 定义子类C,继承自中间类Bclass C(B):    def method_C(self):        print("This is method C")

在上述代码中,类A是基类,类B继承自基类A,类C继承自中间类B。这样,类C就拥有了自己的方法method_C,以及继承自类B和类A的方法method_B和method_A。

通过多层继承,实例化类C的对象,我们既可以调用method_C方法,也可以调用从类B和类A继承而来的方法:

obj = C()obj.method_C()  # 调用C类的方法obj.method_B()  # 调用B类的方法obj.method_A()  # 调用A类的方法
This is method CThis is method BThis is method A

需要注意的是,在进行多层继承时,我们要谨慎选择继承关系,以避免出现复杂和难以维护的继承链。合理设计继承关系能够提高代码的可读性和可维护性,同时也要注意避免过度依赖继承,以免造成耦合性过高的问题。

私有权限

父类继承给子类,可以选择性的继承,可以选择有的东西不继承,这些不继承的事物可以被设置成私有权限,私有权限只能在当前类中访问和修改,就算是该类的子类也不能使用。

在 python 中,如果我们想设置私有权限,可以使用连个下划线来修饰方法名或者属性
__xx

class Master():    def __init__(self):        self.wugong = '太极'        self.__name = 'lisi'    def func(self):        print(f'身怀绝技:{self.wugong}')class Prentice(Master):    def __init__(self):        self.wugong = '闪电五连鞭'    def func(self):        print(super().__name)  3 访问父类的私有权限zhangsan = Prentice()zhangsan.func()

在这里插入图片描述
我们不能访问和修改父类中的私有权限

但是呢,我们的父类可以提供接口来供子类或者其他类来获取和修改私有权限。

我们通常使用 get_xx 来获取私有权限值,set_xx 来修改私有权限值。

class Master():    def __init__(self):        self.wugong = '太极'        self.__name = 'lisi'    def func(self):        print(f'身怀绝技:{self.wugong}')    def get_name(self):        return self.__name    def set_name(self,name):        self.__name = namemaster = Master()print(master.get_name())master.set_name('wangwu')print(master.get_name())

在这里插入图片描述
在这里插入图片描述

来源地址:https://blog.csdn.net/m0_73888323/article/details/131690460

--结束END--

本文标题: python 面向对象之继承

本文链接: https://www.lsjlt.com/news/389036.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 面向对象之继承
    文章目录 前言继承的概念单继承多继承子类重写父类的同名方法和属性子类调用父类同名的方法和属性多层继承私有权限 前言 前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大...
    99+
    2023-09-01
    python 开发语言
  • python 面向对象之类的继承
    python中什么是继承:新类不必从头编写新类从现有的类继承,就自动拥有了现有类的所有功能新类只需要编写现有类缺少的新功能继承的好处:复用已有代码自动拥有了现有类的所有功能只需要编写缺少的新功能继承的特点:子类和父类是is关系python继...
    99+
    2023-01-30
    面向对象 python
  • python 面向对象之继承顺序
    先来看一个经典类class A:     def __init__(self):         p...
    99+
    2023-01-30
    面向对象 顺序 python
  • Python面向对象——继承
    #coding:utf-8 """ 术语: 1、在python3中,自定义创建的类都默认继承了python类中名为object的类 2、object类提供的方法,是双下划线开头的,是为了提供给python内部使用 3、被继承的类叫做超类,...
    99+
    2023-01-31
    面向对象 Python
  • python面向对象之类的继承详解
    目录一、概述 二、类的继承2.1 继承的定义2.2 构造函数的继承 2.3 子类对父类方法的重写三、类继承的事例一、概述  面向对象编程 (OOP) 语言的一个主要功能就是“继承”。...
    99+
    2022-11-12
  • Python面向对象编程之类的继承
    目录1、对继承的理解2、类继承的构建3、Python中最基础的类4、ython类的重载4.1 属性重载4.2 方法重载5、类的多继承1、对继承的理解 继承(Inheritance) ...
    99+
    2022-11-12
  • python 面向对象之继承实例讲解
    面向对象编程语言具有封装、继承、多态三个基本特征,本文就继承举例详谈比如说学校主要有3大角色:学校,讲师,学员学校可以注册学员,统计有多少学员老师负责讲课学生听课,提问,学习,交学费先定义4个类:class School(obje...
    99+
    2023-01-30
    面向对象 实例 python
  • Java全面分析面向对象之继承
    目录继承什么是继承呢?子类访问父类的成员变量子类访问父类非同名成员变量子类访问父类同名成员变量子类访问父类的成员方法子类访问父类的非同名方法子类访问父类的同名方法super关键字su...
    99+
    2022-11-13
  • Java面向对象之类的继承介绍
    目录继承的作用如果没有继承机制是怎么样的?使用继承机制后的示例?类的继承是什么?子类和父类的继承机制Java单继承Java继承的顶级父类:Object对象的类型转换对象向上转型对象向...
    99+
    2022-11-13
  • 【JavaSE】面向对象编程思想之继承
     【本节目标】 继承 组合 目录 1. 为什么需要继承 2. 继承概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. 子类构造方法 7....
    99+
    2023-09-03
    java 开发语言 学习方法
  • 详析Python面向对象中的继承
    目录一单继承1.继承的基本语法格式如下2.查看类继承情况3.继承中的属性和方法4.初始化函数__init__()和super二多层继承三多重继承一 单继承 类继承作为python的三...
    99+
    2022-11-13
  • Python基础面向对象之继承与派生详解
    目录一、面向对象三大特征之继承1、继承的概念2、继承的本质3、继承的实操4、继承后名字查找的顺序5、经典类与新式类二、派生1、派生的概念2、派生的方法一、面向对象三大特征之继承 py...
    99+
    2022-11-11
  • Python 面向对象编程的三大特性之继承
    目录Python  面向对象编程的三大特性之继承一、继承1、继承的实际栗子2、继承的好处3、继承的使用场景4、继承有几种?5、Python 中继承的简单语法二、不使用继承、...
    99+
    2022-11-12
  • Java面向对象之继承的概念详解
    目录1. 继承1.1 继承的实现1.2 继承的好处和弊端1.3. Java中继承的特点2. 继承中的成员访问特点2.1 继承中变量的访问特点2.2 super2.3 方法重写2.4 ...
    99+
    2023-05-18
    Java 继承 Java 面向对象
  • JAVA面向对象之继承 super入门解析
    目录1 继承1.1概念1.2 特点1.3 练习:继承入门案例2 super3 继承的用法3.1 练习:super之继承中成员变量使用3.2 练习:super之继承中构造方法的使用4 ...
    99+
    2022-11-13
  • JavaScript面向对象之class继承类案例讲解
    1. 面向对象class继承 在上面的章节中我们看到了JavaScript的对象模型是基于原型实现的,特点是简单,缺点是理解起来比传统的类-实例模型要困难,最大的缺点是继承的实现需要...
    99+
    2022-11-12
  • 【Java基础篇 | 面向对象】—— 继承
    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习Java...
    99+
    2023-10-11
    java 开发语言 面向对象
  • 面向对象封装、继承、多态
    一、面向对象封装   01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装...
    99+
    2023-01-31
    面向对象 多态
  • PHP面向对象之封装,继承与多态详解
    在普通的编程中,没有涉及架构或者良好的设计,绝大多数都是使用的面向过程的方式。 当编程逐步深入后,就需要合理使用面向对象的知识来设计程序,而不是简单地脑海里有了思路就去写代码来实现,...
    99+
    2022-11-13
  • JavaScript面向对象中继承的概念
    本篇内容介绍了“JavaScript面向对象中继承的概念”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作