面向对象

一、三大特征之继承

  • 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、继承与派生的更多相关文章

  1. Python入门之面向对象之类继承与派生

    本章内容 一.继承 二.抽象类 三.继承的实现原理 ======================================================= 一.继承 1. 继承的定义 继承是一 ...

  2. Python面向对象编程——继承与派生

    Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...

  3. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

  4. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  5. python语法学习面向对象之继承

    python语法学习面向对象之继承 转载自:http://www.cnblogs.com/Joans/archive/2012/11/09/2757368.html 只要涉及到面向对象,”类“是必须出 ...

  6. 转 python语法学习面向对象之继承

    传送门 python语法学习面向对象之继承 只要涉及到面向对象,”类“是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念: 包括初始 ...

  7. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  8. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  9. 二十. Python基础(20)--面向对象的基础

    二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...

  10. python基础(24):面向对象三大特性一(继承)

    1. 继承 1.1 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继 ...

随机推荐

  1. Excel 单元格的相对引用和绝对引用

    引用方式 单元格的地址由该单元格所在的行号和列标构成,一个引用代表工作表上的一个或者一组单元格,指明公式中数据所在的位置. 编号 消费记录 价格 1 乒乓球 1 2 火腿肠 2 3 乒乓球 1 4 羽 ...

  2. Shell第一章《变量》

    shell前言 什么是shell shell-'壳' 命令解释器,一种应用程序 shell语言特点 SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称. Shell本身是 ...

  3. 2020牛客NOIP赛前集训营-提高组(第二场)- B.包含 (FWT)

    题面 题解 这题就是个快速沃尔什变换的模板题,输入ai时,令s[ai]=1,对s[]做一遍DWT_AND(s)(快速沃尔什正变换,按位与),然后直接访问s[x]完事. #include<map& ...

  4. C++中的cout.setf(ios::fixed)是什么意思?

    问题描述:在阅读一段代码时,发现代码的最后一部分出现 ... cout.setf(ios::fixed); cout.setf(ios::showpoint); ... 解决: cout.setf() ...

  5. Html飞机大战(二):面向对象绘制背景

    好家伙, 我们为了后续工作的顺利进行,我试着把每一个模块封装为对象 但冻手之前还是要构思一下 我们把天空封装成一个类: 1.来搞一手简单的对象分析:  属性方面的都好理解 来说明一下方法: (1) p ...

  6. Elasticsearch高级检索之使用单个字母数字进行分词N-gram tokenizer(不区分大小写)【实战篇】

    一.前言 小编最近在做到一个检索相关的需求,要求按照一个字段的每个字母或者数字进行检索,如果是不设置分词规则的话,英文是按照单词来进行分词的. 小编以7.6.0版本做的功能哈,大家可以根据自己的版本去 ...

  7. Openstack Neutron:三层技术和实现

    目录 - 1.Neutron 三层技术简介 - 2.集中式router - 1.在节点上安装L3 agent - 2.配置外部网络 - 3.通过CLI或者Horizon 来创建路由 - 4.连接租户网 ...

  8. 《Java基础——循环语句》

    Java基础--循环语句       1. while语句: 规则: 1. 首先计算表达式的值. 2. 若表达式为真,则执行循环语法,直至表达式为假,循环结束.   格式: while(表达式) 语句 ...

  9. day03-3私聊功能

    多用户即时通讯系统03 4.编码实现02 4.4功能实现-私聊功能实现 4.4.1思路分析 客户端 - 发送者: 用户在控制台输入信息,客户端接收内容 将消息构建成Messgae对象,通过对应的soc ...

  10. proxysql 开启http监控页面的方法

    update global_variables set variable_value='true' where variable_name='admin-web_enabled'; LOAD ADMI ...