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

Python面向对象编程之类的继承

2024-04-02 19:04:59 929人浏览 泡泡鱼

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

摘要

目录1、对继承的理解2、类继承的构建3、python中最基础的类4、ython类的重载4.1 属性重载4.2 方法重载5、类的多继承1、对继承的理解 继承(Inheritance)

1、对继承的理解

继承(Inheritance) :代码复用的高级抽象

  • 继承是面向对象设计的精髓之一
  • 实现了以类为单位的高级抽象级别代码复用
  • 继承是新定义类能够几乎完全使用原有类属性与方法的过程

不管是基类还是派生类,只是一种继承说法,这都是普通的Python

也可以按子类、父类和超类划分。

最基础的类是基类,经过一次继承得出派生类,还可以再一次继承,又得出一个派生类;现在最基础的类和第一次继承出来的派生类是父类与子类的关系,派生出来的类在最后一次派生出来的类也是父类与子类的关系,而最基本的类和最后一个派生类属于超类和子类的关系

派生类不仅可以继承一个基类,也可以继承多个基类,这就是所说的多继承的概念

2、类继承的构建

类继承的时候在定义的时候声明继承关系,语法结构如下


class <派生类名>(<基类名>):  # 基类名可以带路径:ModuleNama.BaseClassName
    def __init__(self, <参数列表>):
        <语句块>
    ...

派生类可以直接使用基类的属性和方法

  • 基类的属性基本等于定义在派生类中
  • 派生类可以直接使用基类的类属性、实例属性
  • 派生类可以直接使用基类的各种方法
  • 使用基类的类方法和类属性时,要用基类的类名调用

实例代码:


class TestClass:
    def __init__(self, number):
        self.sum_number = 0
        for i in range(number + 1):
            self.sum_number += i

    def sum_num(self):
        return self.sum_number


class HumanNameClass(TestClass):
    def double_sum(self):
        return self.sum_number * 2  # 对基类属性的使用


value1 = HumanNameClass(100)
print(value1.sum_num())  # 5050  # 对基类实例方法的使用
print(value1.double_sum())  # 10100  # 对派生类实例方法的使用

Python中有两个与继承关系判断有关的函数

接上面的代码,


print(isinstance(value1, TestClass))  # True
print(isinstance(value1, HumanNameClass))  # True
print(isinstance(value1, int))  # False
print(issubclass(HumanNameClass, TestClass))  # True
print(issubclass(TestClass, HumanNameClass))  # False

3、Python中最基础的类

因为Python中万物皆对象,任何一个类也是对象、Python的所有数据类型也对象;Python语言提供所有类的最基础类是object

  • objectPython最基础类的名词,不需要翻译
  • 所有了定义时默认继承object
  • 保留属性和保留方法本质上是object类的属性和方法

示例代码:


print(object.__name__)  # 打印object的名字  # object
print(object.__bases__)  # 打印object所继承的类名称  # ()
print(object.__doc__)  # 打印object类描述  # The most base type
print(object.__module__)  # 打印object所在模块的名称  # builtins
print(object.__class__)  # object所对应的类信息  # <class 'type'>

Python对象的三个要素:

  • 标识 identity对象一旦构建不会改变,用id()获得,一般是内存地址
  • 类型 type对象的类型,用type()获得
  • value分为可变mutable与不可变immutable两种

两个和基础类有关的Python内置功能

函数/关键字 描述
id(x) 返回x的标识。CPython 中 id() 函数用于获取对象的内存地址。
x is y 判断x和y的标识是否相等,返回True或False,不判断值

4、ython类的重载

重载是派生类对基类属性或方法的在定义

  • 属性重载:派生类定义并使用了与基类相同名称的属性
  • 方法重载:派生类定义并使用了与基类相同名称的方法

4.1 属性重载

属性重载采用就近覆盖原则,重载无需特殊标记。方法步骤

  • 优先使用派生类重定义的属性和方法
  • 然后寻找基类的属性和方法
  • 在寻找超类的属性和方法

实例代码:


class TestClass:
    text = "这是基类的类属性"

    def __init__(self, number):
        self.sum_number = 0
        for i in range(number + 1):
            self.sum_number += i

    def sum_num(self):
        return self.sum_number


class HumanNameClass(TestClass):
    text = "这是派生类的类属性"  # 类属性重载

    def __init__(self, number):
        self.sum_number = 1000  # 实例属性重载

    def double_sum(self):
        return self.sum_number * 2


value1 = HumanNameClass(100)
print(TestClass.text)  # 这是基类的类属性
print(value1.text)  # 这是派生类的类属性
print(value1.sum_num())  # 1000

4.2 方法重载

方法重载是派生类对基类方法的在定义;分为完全重载和增量重载

完全重载:派生类完全重定义与基类相同名称的方法

直接在派生类中定义同名方法即可

示例代码:


class TestClass:
    def __init__(self, number):
        self.sum_number = 0
        for i in range(number + 1):
            self.sum_number += i

    def sum_num(self):
        return self.sum_number


class HumanNameClass(TestClass):

    def sum_num(self):  # 方法的重建
        return self.sum_number * 2


value1 = HumanNameClass(100)
print(value1.sum_num())  # 10100

增量重载:派生类扩展定义与基类相同名称的方法,语法结构


class <派生类名>(<基类名>):
    def <方法名>(self, <参数列表>):
        super().<基类方法名>(<参数列表>)
        ...

增量重载使用super()函数

示例代码:


class TestClass:
    def test_text(self):
        print("这是基类的方法")


class TestClass1(TestClass):
    def test_text(self):  # 增量重载
        super().test_text()
        print("这是新增的方法里面的语句")


doc1 = TestClass()
doc2 = TestClass1()
print(doc1.test_text())
print(doc2.test_text())
'''
---输出结果---
这是基类的方法
None   # 因为函数没有返回值
这是基类的方法
这是新增的方法里面的语句
None  # 因为函数没有返回值

'''

5、类的多继承

多继承的构建是在定义时声明继承关系,语法结构


class <类名>(<基类名1>, <基类名2>,..., <基类名N>):  # 基类名可以带路径:ModuleNama.BaseClassName
    def __init__(self, <参数列表>):
        <语句块>
    ...

Python中多继承采用深度优先, 从左至右的方法。所谓深度优先从左至右就是先从最左边开始找,找到他的基类,如果基类没有在往上面找,直到最基础的object类时还没有找到,才往右开始寻找。

所有属性和方法的使用按照“深度优先从左至右”的方式选取

构造函数也参照上述原则,super()也参照上述原则

多个基类的顺序是关键

示例代码:


class Test1:
    def test(self):
        text = "这是基类1"
        return text


class Test2:
    def test(self):
        text = "这是基类2"
        return text


class Test3(Test1, Test2):
    pass


class Test4(Test2, Test1):
    pass


value1 = Test3()
value2 = Test4()
print(value1.test())  # 这是基类1
print(value2.test())  # 这是基类2

循序决定输出的结果

对继承概念的理解,类继承的构建,了解了objectPython中最基础的类

类属性的重载原则是最近覆盖原则

类方法的重载:重新重载的话类似类属性的重载;增量重载使用super()函数

多继承采用的方法是深度优先,从左至右

到此这篇关于Python面向对象编程之类的继承的文章就介绍到这了,更多相关Python类的继承内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python面向对象编程之类的继承

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

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

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

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

下载Word文档
猜你喜欢
  • Python面向对象编程之类的继承
    目录1、对继承的理解2、类继承的构建3、Python中最基础的类4、ython类的重载4.1 属性重载4.2 方法重载5、类的多继承1、对继承的理解 继承(Inheritance) ...
    99+
    2022-11-12
  • python 面向对象之类的继承
    python中什么是继承:新类不必从头编写新类从现有的类继承,就自动拥有了现有类的所有功能新类只需要编写现有类缺少的新功能继承的好处:复用已有代码自动拥有了现有类的所有功能只需要编写缺少的新功能继承的特点:子类和父类是is关系python继...
    99+
    2023-01-30
    面向对象 python
  • python 面向对象之继承
    文章目录 前言继承的概念单继承多继承子类重写父类的同名方法和属性子类调用父类同名的方法和属性多层继承私有权限 前言 前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大...
    99+
    2023-09-01
    python 开发语言
  • python面向对象之类的继承详解
    目录一、概述 二、类的继承2.1 继承的定义2.2 构造函数的继承 2.3 子类对父类方法的重写三、类继承的事例一、概述  面向对象编程 (OOP) 语言的一个主要功能就是“继承”。...
    99+
    2022-11-12
  • Python 面向对象编程的三大特性之继承
    目录Python  面向对象编程的三大特性之继承一、继承1、继承的实际栗子2、继承的好处3、继承的使用场景4、继承有几种?5、Python 中继承的简单语法二、不使用继承、...
    99+
    2022-11-12
  • 【JavaSE】面向对象编程思想之继承
     【本节目标】 继承 组合 目录 1. 为什么需要继承 2. 继承概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. 子类构造方法 7....
    99+
    2023-09-03
    java 开发语言 学习方法
  • python 面向对象之继承顺序
    先来看一个经典类class A:     def __init__(self):         p...
    99+
    2023-01-30
    面向对象 顺序 python
  • Java面向对象之类的继承介绍
    目录继承的作用如果没有继承机制是怎么样的?使用继承机制后的示例?类的继承是什么?子类和父类的继承机制Java单继承Java继承的顶级父类:Object对象的类型转换对象向上转型对象向...
    99+
    2022-11-13
  • Python面向对象——继承
    #coding:utf-8 """ 术语: 1、在python3中,自定义创建的类都默认继承了python类中名为object的类 2、object类提供的方法,是双下划线开头的,是为了提供给python内部使用 3、被继承的类叫做超类,...
    99+
    2023-01-31
    面向对象 Python
  • 举例讲解Python面向对象编程中类的继承
    python创建一个类很简单只需要定义它就可以了. class Cat: pass 就像这样就可以了,通过创建子类我们可以继承他的父类(超类)的方法。这里重新写一下cat class Cat...
    99+
    2022-06-04
    面向对象 Python
  • python 面向对象之继承实例讲解
    面向对象编程语言具有封装、继承、多态三个基本特征,本文就继承举例详谈比如说学校主要有3大角色:学校,讲师,学员学校可以注册学员,统计有多少学员老师负责讲课学生听课,提问,学习,交学费先定义4个类:class School(obje...
    99+
    2023-01-30
    面向对象 实例 python
  • JavaScript面向对象之class继承类案例讲解
    1. 面向对象class继承 在上面的章节中我们看到了JavaScript的对象模型是基于原型实现的,特点是简单,缺点是理解起来比传统的类-实例模型要困难,最大的缺点是继承的实现需要...
    99+
    2022-11-12
  • 面向对象多继承和网络编程
      1.先找左再找右 class A(object): pass class B(object): def f1(self): print('B') class C(A,B): pass...
    99+
    2023-01-30
    面向对象 网络编程
  • Java全面分析面向对象之继承
    目录继承什么是继承呢?子类访问父类的成员变量子类访问父类非同名成员变量子类访问父类同名成员变量子类访问父类的成员方法子类访问父类的非同名方法子类访问父类的同名方法super关键字su...
    99+
    2022-11-13
  • 详析Python面向对象中的继承
    目录一单继承1.继承的基本语法格式如下2.查看类继承情况3.继承中的属性和方法4.初始化函数__init__()和super二多层继承三多重继承一 单继承 类继承作为python的三...
    99+
    2022-11-13
  • Python面向对象编程之类的概念
    目录1、面向对象基本概念1.1 万物皆对象1.2 面向对象编程1.3 面向对象的特征2、Python面向对象的术语3、Python类的构建3.1 类的基本构建 3.2 类的构造函数3...
    99+
    2022-11-12
  • Python面向对象编程之类的封装
    目录1、封装的理解2、私有类属性、公开类属性、私有实例属性和公开实例属性2.1 公开类属性2.2 私有类属性2.3 公开实例属性2.4 私有实例属性2.5 私有属性不一定真的私有3、...
    99+
    2022-11-12
  • Python面向对象编程之类的运算
    目录1、运算概念的理解2、运算符的重载2.1 算术运算符2.2 比较运算符2.3 成员运算2.4 其他运算3、Python类的多态1、运算概念的理解 运算(Operation)是操作...
    99+
    2022-11-12
  • Python面向对象编程之类的进阶
    目录1、引用的概念2、对象的拷贝2.1 实例方法的引用2.2 类的特性装饰器3、类的名称修饰3.1 _单下划线开头的名称修饰3.2 _单下划线结尾的名称修饰3.3 __双下划线开头的...
    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 面向对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作