Python基础之面向对象:3、继承与派生
面向对象
一、三大特征之继承
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基础之面向对象:3、继承与派生的更多相关文章
- Python入门之面向对象之类继承与派生
本章内容 一.继承 二.抽象类 三.继承的实现原理 ======================================================= 一.继承 1. 继承的定义 继承是一 ...
- Python面向对象编程——继承与派生
Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...
- Python 基础 四 面向对象杂谈
Python 基础 四 面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...
- python基础,函数,面向对象,模块练习
---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? # [] {} () None 0 2,位和字节的关系? # ...
- python语法学习面向对象之继承
python语法学习面向对象之继承 转载自:http://www.cnblogs.com/Joans/archive/2012/11/09/2757368.html 只要涉及到面向对象,”类“是必须出 ...
- 转 python语法学习面向对象之继承
传送门 python语法学习面向对象之继承 只要涉及到面向对象,”类“是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念: 包括初始 ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- 自学Python之路-Python基础+模块+面向对象+函数
自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python 1.1 自学Python1.1-简介 1.2 自学Python1.2-环境的 ...
- 二十. Python基础(20)--面向对象的基础
二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...
- python基础(24):面向对象三大特性一(继承)
1. 继承 1.1 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继 ...
随机推荐
- QQ高级功能
本篇文章为微信公众号:酿俗 教学内容请跟着小编一起探索吧! 第一步解锁微信豆影藏内容 随后下载需要的材料,注意!手机可能会提示有病毒!这里使用这些功能报病毒很正常 其实并没有病毒只是手机厂商的安全系统 ...
- 【JDBC】学习路径4-分页查询
第一章:什么是分页查询呢? 简而言之,分页数 就是百度搜索引擎中的网页的页数. 分页查询,就是从数据库中提取一部分出来,给用户. 用处:减少服务器负担. 为了方便测试,我们先给数据库添加大量信息. 还 ...
- 【Java】学习路径51-线程组
平时创建线程的时候,系统会默认为线程分组. 我们可以使用 ThreadGroup tg1 = t1.getThreadGroup(); 取得t1的线程组对象. 然后使用getName获得线程组名称. ...
- KingbaseES Query Mapping 查询映射功能
有过SQL优化经历的人都知道,对于有些SQL性能问题,可能需要涉及到SQL层面的修改,这不仅麻烦,而且在已上线的系统还存在很大的风险.KingbaseES V8R6 提供了query mapping功 ...
- Grafana Mimir:支持乱序的指标采集
Grafana Mimir:支持乱序的指标采集 译自:New in Grafana Mimir: Introducing out-of-order sample ingestion 很早之前在使用th ...
- 【设计模式】Java设计模式 - 装饰者模式
Java设计模式 - 装饰者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自 ...
- LFS(Linux From Scratch)构建过程全记录(七):进入Chroot并构建临时工具
写在前面 本章将完成临时系统构建的最后缺失部分和各种包构建所需的工具. 解决了所有循环依赖关系后,就可以使用与主机操作系统完全隔离的"chroot"环境进行构建. 注意:接下来的指 ...
- 基于electron+vue+element构建项目模板之【自定义标题栏&右键菜单项篇】
1.概述 开发平台OS:windows 开发平台IDE:vs code 本篇章将介绍自定义标题栏和右键菜单项,基于electron现有版本安全性的建议,此次的改造中主进程和渲染进程彼此语境隔离,通过预 ...
- rabbitmq的内存节点和磁盘节点
RabbitMQ集群里有内存节点与磁盘节点之分. 所谓内存节点,就是将元数据(metadata)都放在内存里,磁盘节点就是放在磁盘上.(内存节点将全部的队列,交换器,绑定关系,用户,权限,和vhost ...
- Gitlab基础知识介绍
GitLab架构图 Gitlab各组件作用 -Nginx:静态web服务器. -gitlab-shell:用于处理Git命令和修改authorized keys列表. -gitlab-workhors ...