Python基础面向对象之继承与派生详解

目录
  • 一、面向对象三大特征之继承
    • 1、继承的概念
    • 2、继承的本质
    • 3、继承的实操
    • 4、继承后名字查找的顺序
    • 5、经典类与新式类
  • 二、派生
    • 1、派生的概念
    • 2、派生的方法

一、面向对象三大特征之继承

python三大特征:

封装、继承、多态

三者中继承最为核心,实际应用多,感受较为直观

封装和多态略微抽象

1、继承的概念

继承的含义:

在现实生活中,继承表示人与人之间资源的从属关系

例如:儿子继承父亲

在编程的世界中,继承表示类与类之间的资源从属关系

例如:类a继承类b

继承的目的:

在现实生活中,儿子继承了附件就拥有了父亲所有资源的支配权限

在编程世界中,类A继承了类B就拥有了类B中所有的数据和方法使用权限

2、继承的本质

继承本质应该分为两部分:

当多个类中含有相同部分时,我们就把相同的部分抽离出去,将相同的部分新成一个新的类,在用刚才被抽离出去相同部分的类,去继承新的那部分,这样的好处就是,当多个类需要一个相同用的功能时,可以节省代码,不用反复编写

抽象:将多个类相同的东西抽出去,形成一个新的类

继承:将多个类继承刚刚抽取出来的新的类

对象>>>:数据与功能的结合体

类(子类)>>>:多个对象相同功能和数据的结合体

父类>>>:多个子类相同功能和数据的结合体

本质:类、父类的本质都是为了节省代码,减少重复编写相同代码的时间,使用时更为方便

3、继承的实操

在定义类的时候,类名后方可加括号,早括号内填入其他它类的名字,就意味着继承了其它类

python支持多类继承,括号内可填写多个类名,只需用逗号隔开即可

# 1、定义两个类,其中一个假设为父类,另一个假设为子类
class Father:
    money = 99999999
    house = '老北京四合院'  # 父类中数据强大
class Son:
    pass  # 子类中空空如也
# 2、父类中的数据,子类无权直接使用,当我们在子类中继承父类后,子类和子类产生的对象都可以通过'点'的方式使用父类中的数据
class Father:
    money = 99999999
    house = '老北京四合院'
class Son(Father):
    pass
# 子类直接使用父类中的数据
print(Son.money)
# 子类产生的对象使用父类中的数据
obj1 = Son()
print(obj1.money)
------------------------------------------------------------------------------------
99999999
99999999

4、继承后名字查找的顺序

未继承:

对象(object)自身名称空间>>>类的名称空间

单线继承:

对象(object)自身名称空间>>>子类的名称空间>>>父类的名称空间

多线继承:

1、菱形继承: (广度优先,最后才会找闭环的定点)

对象自身名称空间>>>子类名称空间>>>父类名称空间(形参内由左至右)>>>闭环

2、非菱形继承: (深度优先)

对象自身名称空间>>>子类名称空间>>>父类名称空间(形参内由左至右)

在一个子类绑定多个父类时,名字的查找顺序可能比较难理解,针对这个问题,可以使用python中内置方法:mor()

通过对象名点mor() 的方式,可以帮助我们查看名字的查找顺序

5、经典类与新式类

经典类:

不继承object的类或者其子类的类

新式类:

继承object或者其之类的类

在python3中,只有新式类,所有类都默认继承object

在python2中,区分经典类和新式类

在以后我们定义类的时候,如果没有明确的父类,可以在类的括号内填入object,这样话能够提高我们代码的兼容性

二、派生

1、派生的概念

派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法

2、派生的方法

1.直接引用父类的__ init __为其传参,并添加子类属性

缺点:代码重复率太高,浪费资源,时间

class People:
    school = '清华大学'
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age
class Teacher(People):
    def __init__(self, name, sex, age, title): #派生
        self.name = name
        self.sex = sex
        self.age = age
        self.title = title
    def teach(self):
        print(f'{self.name}是老师')
obj = Teacher('lili','female', 28, '高级教师')
#只会找自己类中的__init__
print(obj.name, obj.sex, obj.age, obj.title)
#lili female 28 高级教师

2.通过super()来只想父类的属性

super()是一个特殊的类,在子类__ init __内调用super得到一个对象,该对象指向父类的名称空间

class Teacher(People):
    def __init__(self, name, sex, age, title):
        super().__init__(name, age, sex)
        #调用的是绑定方法,自动传入self
        self.title = title
	 def teach(self):
         print(f'{self.name}是老师')
obj = Teacher('lili','female', 28, '高级教师')

注意:在python2中super 的使用需要完整地写成super(自己的类名,self),而在python3中可以简写为super()。

以上就是Python基础面向对象之继承与派生详解的详细内容,更多关于Python面向对象继承派生的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python 面向对象编程的三大特性之继承

    目录 Python  面向对象编程的三大特性之继承 一.继承 1.继承的实际栗子 2.继承的好处 3.继承的使用场景 4.继承有几种? 5.Python 中继承的简单语法 二.不使用继承.使用继承的区别 1.需求背景 2.不使用继承 2.使用继承 三.继承的传递性 1.什么是传递性 四.继承和抽象 1.继承的重点 Python  面向对象编程的三大特性之继承 一.继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的

  • python面向对象之类的继承详解

    一.概述 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过继承创建的新类称为"子类"或"派生类",被继承的类称为"基类"."父类"或"超类",继承的过程,就是从一般到特殊的过程.在某些 OOP 语言中,一个子类可以继承多个基类.但是一般情况下,一个子类只能有一个基类,要实

  • Python pygame派生精灵和精灵组创建敌机

    目录 派生精灵子类代码实现 实现思路: 扩展补充 代码演示 飞机大战游戏简介 使用游戏精灵和精灵组创建敌机 案例需求: 实现步骤: 职责: 代码演示 运行结果 派生精灵子类代码实现 本案例需求的类图如下所示:三个属性,两个方法 本文所要开发的游戏精灵,是继承自pygame的精灵子类 GameSprite image rect speed init(self, image_name, speed = 1): update(self): 实现思路: 想实现游戏精灵这个子类代码.首先,让游戏精灵继承自

  • python语法学习之super(),继承与派生

    目录 1 什么是继承? 2 继承的规则 3 继承原理 4 多继承属性查询顺序 5 查找流程 属性查找 6 继承概念的实现 7 私有属性私有方法在继承中的表现 8 派生类 9 属性的覆盖(派生属性) 10 父类属性(方法)的重用 11 继承派生机制的作用 12 Super() 1 什么是继承? 继承是一种创建新类的方式: 在Python中,新建的类可以继承一个或多个父类,新建的类可称为子类或派生类,父类又可称为基类或超类. 继承可以用来解决类与类之间的代码重用性问题: class ParentCl

  • Python面向对象三大特征 封装、继承、多态

    目录 1.封装 1.1 私有属性和私有方法 2.继承 2.1 方法的重写 2.2 在子类方法中调用父类方法 2.3 多继承 2.4 新式类和经典类 3.多态 1.封装 封装: 根据 职责 将 属性 和 方法 封装到一个 抽象的类 中将数据(属性)和行为(方法)包装到类对象中.在方法内部对属性进行操作,在类对象的外部调用方法.这样无需关心方法 内部的具体实现,从而隔离了复杂度 封装是面向对象编程的一大特点 面向对象编程的第一步.将属性和方法封装到一个抽象的类中 外界使用类创建对象,然后让对象调用方

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

    目录 1.对继承的理解 2.类继承的构建 3.Python中最基础的类 4.ython类的重载 4.1 属性重载 4.2 方法重载 5.类的多继承 1.对继承的理解 继承(Inheritance) :代码复用的高级抽象 继承是面向对象设计的精髓之一 实现了以类为单位的高级抽象级别代码复用 继承是新定义类能够几乎完全使用原有类属性与方法的过程 不管是基类还是派生类,只是一种继承说法,这都是普通的Python类 也可以按子类.父类和超类划分. 最基础的类是基类,经过一次继承得出派生类,还可以再一次继

  • Python基础面向对象之继承与派生详解

    目录 一.面向对象三大特征之继承 1.继承的概念 2.继承的本质 3.继承的实操 4.继承后名字查找的顺序 5.经典类与新式类 二.派生 1.派生的概念 2.派生的方法 一.面向对象三大特征之继承 python三大特征: 封装.继承.多态 三者中继承最为核心,实际应用多,感受较为直观 封装和多态略微抽象 1.继承的概念 继承的含义: 在现实生活中,继承表示人与人之间资源的从属关系 例如:儿子继承父亲 在编程的世界中,继承表示类与类之间的资源从属关系 例如:类a继承类b 继承的目的: 在现实生活中

  • Python多重继承之菱形继承的实例详解

    继承是面向对象编程的一个重要的方式,通过继承,子类就可以扩展父类的功能.在python中一个类能继承自不止一个父类,这叫做python的多重继承(Multiple Inheritance ). 语法 class SubclassName(BaseClass1, BaseClass2, BaseClass3, ...): pass 菱形继承 在多层继承和多继承同时使用的情况下,就会出现复杂的继承关系,多重多继承. 其中,就会出现菱形继承.如下图所示.mark 在这种结构中,在调用顺序上就出现了疑惑

  • python基础之Socket套接字详解

    前言 Python语言提供了Socket套接字来实现网络通信. Python的应用程序通常通过Socket"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. 服务器和客户端的源代码 服务器端 #coding=utf-8 #创建TCP服务器 import socket import time from time import ctime HOST = '127.0.0.1' PORT = 8080 BUFSIZE=1024 sock = socket.s

  • Python基础之Numpy的基本用法详解

    一.数据生成 1.1 手写数组 a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) # 一维数组 b = np.array([[1, 2], [3, 4]]) #二维数组 1.2 序列数组 numpy.arange(start, stop, step, dtype),start默认0,step默认1 c = np.arange(0, 10, 1, dtype=int) # =np.arange(10) [0 1 2 3 4 5 6 7 8 9] d

  • python基础之停用词过滤详解

    目录 一.什么是停用词 二.加载停用词字典 三.删除停用词 四.分词以及删除停用词 五.直接删除停用词(不分词) 一.什么是停用词 在汉语中,有一类没有多少意义的词语,比如组词"的",连词"以及".副词"甚至",语气词"吧",被称为停用词.一个句子去掉这些停用词,并不影响理解.所以,进行自然语言处理时,我们一般将停用词过滤掉. 而HanLP库提供了一个小巧的停用词字典,它位于Lib\site-packages\pyhanlp\

  • Python基础语法之变量与数据类型详解

    目录 一. 输出函数print 1.1 可以输出数字 1.2 可以输出字符串 1.3 可以输出表达式 1.4 可以输出至文件中 二. 变量与数据类型 2.1 整型 2.2 浮点型 2.3 字符串型 2.4 布尔型 3. 数据类型转换 3.1 int() 3.2 float() 3.3 str() 一. 输出函数print 在python中,print()是可以直接使用的输出函数,将数据输出到控制台上. 1. print函数的使用 1.1 可以输出数字 只要是数字都可以输出 # author: 爪

  • Python基础之类的定义和使用详解

    目录 1.定义类 2.创建类的实例 3.“魔术”方法——_ init () 4.创建类的成员并访问 4.1.创建实例方法并访问 4.2.创建数据成员并访问 5.访问限制 在Python中,类表示具有相同属性和方法的对象的集合.在使用类时,需要先定义类,然后再创建类的实例,通过类的实例就可以访问类中的属性和方法了. 1.定义类 在Python中,类的定义使用class关键字来实现,语法如下: class ClassName:“”“类的帮助信息”“” # 类文本字符串statement # 类体 参

  • Python基础学习之函数方法实例详解

    本文实例讲述了Python基础学习之函数方法.分享给大家供大家参考,具体如下: 前言 与其他编程语言一样,函数(或者方法)是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. python的函数具有非常高的灵活性,可以在单个函数里面封装和定义另一个函数,使编程逻辑更具模块化. 一.Python的函数方法定义 函数方法定义的简单规则: 1. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 2. 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 3.

  • Python基础之语法错误和异常详解

    目录 一.前言 二.异常 三.异常处理 3.1 try/except 3.2 try/except ... else 3.3 try-finally 四.抛出异常 4.1 raise 五.用户自定义异常 六.断言 assert 一.前言 Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常. 二.异常 即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误.运行期检测到的错误被称为异常 三.异常处理 3.1 try/except tr

  • Python3.5面向对象与继承图文实例详解

    本文实例讲述了Python3.5面向对象与继承.分享给大家供大家参考,具体如下: 1.编程的方式 2.面向对象的基本概念 3.类的基本概念 4.类的定义与调用--简单代码举例 注:建议类名的开头字母用大写,在Python中,类内的函数称作方法,类外的函数还是称作函数. #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #类 class Person: i = 10 #属性(变量) def eat(self):

随机推荐