博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象之继承(Day24)
阅读量:6584 次
发布时间:2019-06-24

本文共 1779 字,大约阅读时间需要 5 分钟。

一.继承

1.什么是继承

继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

2.继承与抽象(先抽象再继承)

抽象基抽取类似或者说比较像的部分。

抽象分为两个层次:

1.将奥巴马和梅西这俩对象比较像的部分抽取成类; 

2.将人,猪,狗这三个类比较像的部分抽取成父类。

抽象最主要的作用是划分类别(可以隔离关注点,降低复杂度)

继承:是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能用继承的方法表达出抽象的结构

二.派生

当然子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了。

class Animal:    '''    人和狗都是动物,所以创造一个Animal基类    '''    def __init__(self, name, aggressivity, life_value):        self.name = name  # 人和狗都有自己的昵称;        self.aggressivity = aggressivity  # 人和狗都有自己的攻击力;        self.life_value = life_value  # 人和狗都有自己的生命值;    def eat(self):        print('%s is eating'%self.name)class Dog(Animal):    '''    狗类,继承Animal类    '''    def bite(self, people):        '''        派生:狗有咬人的技能        :param people:          '''        people.life_value -= self.aggressivityclass Person(Animal):    '''    人类,继承Animal    '''    def attack(self, dog):        '''        派生:人有攻击的技能        :param dog:         '''        dog.life_value -= self.aggressivityegg = Person('egon',10,1000)ha2 = Dog('二愣子',50,1000)print(ha2.life_value)print(egg.attack(ha2))print(ha2.life_value)

注意:像ha2.life_value之类的属性引用,会先从实例中找life_value然后去类中找,然后再去父类中找...直到最顶级的父类。

三.抽象类

什么是抽象类

    与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化

抽象类与接口类

抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。

抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计 

在python中,并没有接口类这种东西,即便不通过专门的模块定义接口,我们也应该有一些基本的概念。

四.继承小结

继承的作用

减少代码的重用提高代码的可读性规范编码模式

几个名词

抽象:抽象即抽象类似或者说比较像的部分,是一个从具体到抽象的过程继承:子类继承了父类的方法和属性派生:子类在父类方法和属性的基础上产生了新的方法和属性

抽象类与接口类

1.多继承问题在继承抽象类的过程中,我们应该尽量避免多继承;而在继承接口的时候,我们反而鼓励你来多继承接口2.方法的实现在抽象类中,我们可以对一些抽象方法做出基础实现;而在接口类中,任何方法都只是一种规范,具体的功能需要子类实现

钻石继承

新式类:广度优先经典类:深度优先

 

转载于:https://www.cnblogs.com/shaojiafeng/p/7358202.html

你可能感兴趣的文章
我的友情链接
查看>>
修改浏览器默认滚动条插件
查看>>
ATEN宏正盛装出席Infocomm China 2016
查看>>
SCCM安装及配置过程总结
查看>>
求最大连续bit数
查看>>
卸载KDE / Xfce / LXDE 回到纯Unity 的状态
查看>>
linux
查看>>
今夜杂谈
查看>>
第七章 虚拟化 虚拟机备份 Veeam backup &Replication
查看>>
微软云计算介绍与实践(介绍之五)
查看>>
在linux下搭建HA和LB集群(lvs&heartbeat群集)
查看>>
安装wine
查看>>
阻抗匹配与史密斯(Smith)圆图基本原理
查看>>
路由器与交换机的密码恢复
查看>>
Cisco路由器上的IPSec协议(站点到站点的×××)
查看>>
Java面向对象学习笔记 -- 5(抽象类、接口)
查看>>
关于apache下同IP多域名支持HTTPS和80跳转HTTPS的配置
查看>>
Linux Python详细安装、升级指南
查看>>
软件架构
查看>>
无法修复ie使用代理服务器
查看>>