目录

前言:

Python的继承简介

1.什么是继承

2.继承的好处

3.object类

继承的相关用法

1.继承的定义与法则

2.对继承的重写

3.(单继承)多层继承

4.多继承

5.多继承重写时调用父类方法


前言:

在讲之前,我想说说中国古代历史。我们都知道在古代,君王的传位是遵循嫡长子继承制的,皇帝的位置一般是传给太子的,那在继承的过程中也就是说皇帝的所有权利以及所拥有的东西都会传给下一个皇帝,但是相关的规矩一般是不会变化的,比如说朝代的国号以及一些重要制度,但是这不代表新皇帝不可以去改革,比如战国时期秦国的商鞅变法。

好了这里讲这么多,我们对“继承”这个词有点理解吧,在Python中也基本上是遵循这样的规则的,废话不多说,一起来看看吧!!!

Python的继承简介

1.什么是继承

继承嘛,顾名思义就是后者继承先者的某些特征和属性,比如说:儿子继承老爸的股份,太子继承皇位等等。在Python中,被继承的类叫做父类,继承的类叫做子类,子类继承父类的属性和方法

2.继承的好处

  • 继承可以解决重复类的代码造成的冗余

  • 继承可以提高代码的复用性

3.object类

在python中所有的类都继承于object,object就是基类,超类 ,所以object类是所有类的父类

class A:pass
class B(object):pass
#object类是所有类的父类,也就是说如果一个类没有指定继承哪个类,那么就会默认继承object类
#所以A和B类都是继承object类,是一样的

我们可以去通过dir()  来获取object类具有的方法,如下所示:

class A(object):def __init__(self,name,age):self.name=nameself.age=age
a=A('Jack',15)
print(a)
#输出结果:<__main__.A object at 0x00000216806D0460>

继承的相关用法

1.继承的定义与法则

定义

class Son(Father):

 法则

一般来说,子类可以继承父类的属性和方法,但是这些属性和方法都是公有的,不是私有化的,所以父类的私有化属性和方法是继承不了的

示例:

class Oldking(object):def __init__(self,name,clothes,seal,mausoleum):self.name=nameself.clothes=clothesself.seal=sealself.__mausoleum=mausoleum#私有化属性def dynasty(self):print('唐朝')def __years(self): #私有化方法print('贞观之治')class Newking(Oldking):passt=Newking('武则天','龙袍','玉玺','帝陵')
print(t.name,t.clothes,t.seal) #这里无法输出  帝陵,因为被父类私有化了
t.dynasty()  #同时也无法所以__years() 方法,这个方法也是私有化了
#输出结果:武则天 龙袍 玉玺
#         唐朝

2.对继承的重写

新皇帝可以继承老皇帝的权利,那当然可以进行相关制度的改革,或者说是年号的改革,比如说唐太宗年号为贞观之治,武则天的是贞观遗风。所以我们在Python中子类也可以对父类继承的东西进行重写。

class Old(object):def __init__(self):self.king='隋炀帝'self.clothes='龙袍'def dynasty(self):print('这是隋朝')class New(Old):def __init__(self):self.king='唐高祖'self.clothes=Old().clothesdef dynasty(self):print('这是唐朝')
t=New()
print(t.king,t.clothes)
t.dynasty()
#输出结果:唐高祖 龙袍
#         这是唐朝

这个示例可以看出,重写了朝代和皇帝的名字,然而对龙袍进行了保留继承

3.(单继承)多层继承

多层继承就涉及到父类继承其父类,子类又继承父类,就是一种继承的嵌套,也就是孙子继承父亲的,父亲继承爷爷的。当然在每次继承的过程中也是可以对相关内容进行重写。在继承过程中,属性的查找顺序是先从自身属性去查找,如果找不到就去父类去查找,如果父类还找不到就去爷爷类查找,以此类推……

顺序:对象>子类>父类>父父类

示例:

class Grandpa(object):def __init__(self):self.__name='史蒂夫'self.money=100def fun(self):print('传家宝:尚方宝剑')
class Father(Grandpa):def __init__(self):self.money=2**10
class Son(Father):def college(self):print('GUET')
AJ=Son()
print(AJ.money)
AJ.fun()
AJ.college()
#输出结果:
# 1024
# 传家宝:尚方宝剑
# GUET

这个也是很好理解的,如果父类没有特定设置私有化属性的话,子类会一一继承,如果一直嵌套下去的话,到最后子类具有的属性和特点会非常多,这就是一个累积过程。当我们去创建一个实例对象,然后去查找这个实例对象相关属性和方法时,这会依次向父类查找,直到找到为止。

4.多继承

多继承是表示一个子类具继承个父类,也就是说一个儿子有多个父亲(到处认爹) 一个子类继承多个父类的东西。

继承顺序:在继承中出现相同方法则继承顺序是从左到右

示例1:

class Father0(object):def fun(self):print('有钱')
class Father1(object):def fun(self):print('穷')
class Son0(Father0,Father1):pass
class Son1(Father1,Father0):pass
Jack=Son0()
jb=Son1() #输出结果:有钱
Jack.fun()
jb.fun() #输出结果:穷

在多继承中,我们可以去通过__mro__方法去查看继承的属性,(从左到右)

示例2:

class G:pass
class E(G):pass
class F(G):pass
class B(E):pass
class C(F):pass
class D(G):pass
class A(B, C, D):pass
son=A()
print(A.__mro__) #查看相同的方法继承顺序

输出结果:

顺序为:A->B->E->G->C->F->D->object

5.多继承重写时调用父类方法

在重写多/但继承父类的方法时,但是又想调用父类的方法,这时候就用到super() 方法

super() 方法是按照上面所说的继承顺序来执行的,也就是执行第一个继承的父类的方法

class Sheep(object):def sound(self):print('咩咩咩')
class Cat(object):def sound(self):print('喵喵喵')def animal(self):print('猫咪')
class Dog(Sheep):def animal(self):print('小狗')
class A(Dog,Cat):def sound(self):print('哈哈哈')super().sound() #调用(按照顺序)父类的方法
tt=A()
tt.sound()
#输出结果:哈哈哈
#        咩咩咩

可能会有些人疑惑,明明Dog没有定义sound() 方法,但是又为什么可以找到呢,其实是Dog继承了Sheep类,是在这里找到了sound() 方法

其实如果我们想去直到调用哪一个父类的方法,我们可以直接去声明调用:

父类.方法(self)

class Cat(object):def sound(self):print('喵喵喵')def animal(self):print('猫咪')
class Dog(object):def animal(self):print('小狗')
class A(Dog,Cat):def sound(self):Cat.sound(self)####print('哈哈哈')
tt=A()
tt.sound()
print(A.__bases__)
#输出结果:喵喵喵
#        哈哈哈

好了,这一期就到这里了先,我们下一期再见~~~

分享一张壁

Python进阶-----面对对象4.0(面对对象三大特征之--继承)相关推荐

  1. Python攻城师的成长————面向对象的三大特征(继承、多态)

    学习目标: 了解继承与多态的概念,重点是要学会运用继承去处理问题 学习内容: 继承 在面对对象程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,而被继 ...

  2. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  3. Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]

    ✅ Blogger Learns Python is for learning the "Deep Learning". 文章目录 一.面向对象编程的简介 二.类与对象 -- 基础 ...

  4. 小白IT:从0~明白带你体验python中做上帝感觉--一切皆对象,处处是多态——面向对象

    文章目录 Python 面向对象从0到基础 一.面向对象 1 面向过程VS面向对象** 2 了解一些名词: 3 类 类的声明 **类的作用:属性引用和实例化** **定义函数和类的区别** 类属性的查 ...

  5. Java-Day12 面向对象的三大特征之封装、继承,单例模式(饿汉式、懒汉式)、方法重写 (覆盖)、注解 (annotation)、super关键字、对象的创建流程超详细

    目录 1. 面向对象的三大特征之封装 1.1 封装的含义 1.2 封装的目的 1.3 封装的优点 1.4 封装的实现过程 1.5 拓展知识:JavaBean 2. 面向对象的三大特征之继承 2.1 继 ...

  6. 学习python第十五天,面对对象

    学习python第十五天,面对对象 面对对象又叫劝退对象,要么劝退你的对象,要么python劝退你,hhhh 开玩笑,但是这块知识点确实比较难 面向对象编 面向对象编程 指令式编程---->面向 ...

  7. 7.1.3 Python进阶 《函数》定义、调用,参数,返回值《面向对象》概念,类,实例,对象,属性,方法《模块、包》导入,自定义,常用内置:datatime,time,random,os,sys

    目录 ======== 第四部分 Python进阶 ======== 第一节 函数 4.1.1 函数定义及调用 4.1.2 函数的参数 4.1.3 函数的返回值 第二节 面向对象 4.2.1 面向对象 ...

  8. Python进阶_wxpy学习:机器人对象

    目录: 目录: 前言 机器人对象 初始化/登陆 搜索聊天对象 搜索好友: 搜索群聊: 在群聊中搜素: 搜索任何类型的聊天对象 (但不包含群内成员) 加好友和建群 自动接受好友请求: 其他 控制多个微信 ...

  9. Python进阶06 循环对象

    Python进阶06 循环对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 这一讲的主要目的是为了大家在读Python程序的时 ...

最新文章

  1. 谷歌开源框架 FUSS,让声音分离不再成为难题
  2. ip pim spare 源树 和 共享树_iPhone通过内置应用与电脑传输共享文件指南
  3. mysql5.7+proxy_mysql5.7使用ProxySQL实现读写分离
  4. [机器学习]正则化方法 -- Regularization
  5. 移动端页面rem+media写法过程
  6. MarkDown 行首缩进
  7. 使用代码段遍历,枚举类型Enum
  8. QThread的用法
  9. 最全SSH命令 - 11种用法
  10. 千万级敏感词过滤设计
  11. 计算机专业考研2021,2021考研:计算机专业考研方向有哪些?
  12. Ubuntu 更换阿里云软件源
  13. [游泳] 游泳学习课程
  14. 从“半部电台”到“云监工” 天翼云助力红色电信启航新征程
  15. 【UVM基础】两种启动 sequence 的方式
  16. response.buffer用法
  17. 互联网是什么 互联网是怎么形成的
  18. 贵州计算机教师资格证报名条件,贵州教师资格证报名条件
  19. java 蓝牙_PC平台上JAVA蓝牙通信实现方法
  20. 周大福向北京体育大学教育基金会捐赠1.2亿元设立“郑家纯冠军培养基金”

热门文章

  1. 这家爆红的“萌系治愈所”,原来竟是一家淘宝改造的沙县小吃
  2. oracle的wallet是什么意思,wallet是什么意思?
  3. QQ安装报错0x00008013 与 WPS报错0xc0000142解决办法
  4. 磁盘的 LBA 寻址转换为 CHS 寻址
  5. mysql中update语句的返回值
  6. [LeetCode] N-ary Tree Postorder Traversal N叉树的后序遍历
  7. 远程桌面服务器密码过期进不去怎么办,win10 远程桌面不能使用 新添加了一个远程桌面 提示密码过期 我登录的账号已设置密码永不过期 - Microsoft Community...
  8. Angular学习之组件和@Component
  9. linux 没有那个文件或目录,Linux 解决 bash ./ 没有那个文件或目录 的方法
  10. 使用jad进行反编译