OPP(面向对象编程的缩写)的三大优势:
1.继承
2.封装
3.多态 一.继承
1.继承:是两个对象之间的一种关系
a继承b 例如王思聪继承王健林
在OPP中继承是描述类与类之间的一种关系
2.继承的好处:可以减少代码冗余,极大地提高了代码的复用性
在生活中,儿子继承了父亲的财产,就可以直接使用这些财产
在程序中,一个类a 继承了b,那么a就可以直接使用b类中的特征(变量)和功能(函数).
名词解释: a继承b,a称之为子类(派生类),b称之为父类(基类) 注意:继承描述的是 什么是什么的关系 人是动物
在使用继承时 要信分析 类与类之间的关系 不应该违反显示生活中的原则 例一
class Tecahter:
school = 'oldboy' def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender def tecahing(self):
print('%s is teaching' % self.name) class Student():
school = 'oldboy' def __init__(self,name,age,gender,number):
self.name = name # 此时,很明显下面的有很多代码出现了重复,为降低代码冗余,所以可以使用继承,如例二
self.age = age
self.gender = gender
self.number = number def studying(self):
print('%s is studying') 例二 学生和老师都属于老男孩的,都有年龄和学号,但是老师有老师的技能,学生有学生自己的技能和特征
因此,对于老师和学生都有的特征就可以使用继承来提高代码的复用性,从而减少代码冗余
class Teacher:
school = 'oldboy' def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender def tecahing(self):
print('%s is tecahing' % self.name) class Student(Teacher):
def studying(self):
print('%s is studying' % self.name) t1 = Teacher('egon',67,'male')
t1.tecahing()
print(t1.age)
print(t1.gender) stu1 = Student('deng',18,'male')
stu1.studying()
print(stu1.age)
print(stu1.gender) 二.抽象
在使用继承之前一定要先抽象,再继承
抽象,什么是抽象?
抽取一堆相同的内容,形成一个新的抽象概念(其实就是类,也成为公共基类),这个过程就称之为抽象 例如上一个例子,老男孩的老师和学生,老师有自己的特征和技能,学生也有自己的特征和技能,
老师和学生之间有一些相同的属性和技能(例如都有姓名,性别,年龄),但是老师和学生之间有一些不同的属性和技能
比如老师有自己的工号,而学生没有,老师有自己的独特的技能(讲课),但是学生没有,
而学生也有自己所独有的特征和技能(例如学号,学习等)
此时再使用继承就会有问题,学生在继承的过程中,把老师所独有的技能和特征都继承了过来,这显然是不行的 因此,那我们就可以把这些相同的特征和技能单独拎出来,建立一个新的类,即抽象也可以称之为公共基类
例3 例3
class OldboyPerson: # OldboyPerson 就是老师和学生所共同拥有的特征和技能,被单独拎出来,这就是抽象
school = 'oldboy' def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender def say_hi(self):
print('hello,i am %s' % self.name) class Tecaher(OldboyPerson):
def tecahing(self):
print('%s is tecahing' % self.name) class Student(OldboyPerson):
def studying(self):
print('%s is studying' % self.name) t1 = Tecaher('egon',79,'female')
t1.tecahing()
t1.say_hi() # 此时,egon和deng都可以使用抽象处理来的特征和技能,即公共基类 stu1 = Student('deng',18,'man')
stu1.studying()
stu1.say_hi() 三. 属性的查找顺序
没有继承关系的时候
对象 ---> 类
存在继承关系后
对象 ---> 子类本身 ---> 父类 ---> 父类的父类..........--->object object:
object是所有父类的跟类,所有类都直接或间接的继承自object
在定义类的时候 如果你没有手动继承任何类 默认继承object
object 中包含所有对象通用的方法 新式类和经典类:
新式类 只要是继承自object都叫新式类 在python3中所有类都是新式类
python2 中不会自动继承object 需要手动继承object才能变成一个新式类
新式类和经典类的区别在与继承关系中的属性的查找顺序不同 class Father(object):
age = 30 class Son(Father):
# age = 7
pass
s1 = Son()
# print(s1.__dict__)
# s1.age = 29 # 先找对象自己的age,再往上找子类中的age,若找不到,再找父类中的age
# print(s1.__dict__)
print(s1.age) 四 . 继承的另一种常用方式
可以继承一个系统已有的类 来扩展新功能
需求:给list扩展类型限制的功能 只允许存储整形数据 class MyList(list):
def append(self,object):
print('append run')
if type(object) == int:
list.append(self,object)
else:
print('添加的元素必须是整型') li = MyList()
# li.append(100)
# print(li) li.append('abc')
print(li) 五. 派生与覆盖
派生:
当一个类继承另一个类,并且存在与父类不同的内容时,就称之为派生类
通常情况下 一个子类就是派生类 覆盖:
在继承关系中,子类可以出现与父类完全相同的方法,根据查找方法,会优先使用子类中的方法
这种情况称之为覆盖,如下例 class Person:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender def say_hi(self):
print('你好,我是%s' % self.name) class Student(Person):
# 会覆盖父类中的say_hi 函数
def say_hi(self):
print('hello my name is %s,age is %s' % (self.name,self.age)) stu1 = Student('deng',18,'man')
stu1.say_hi() 六. 子类重用父类的方法
很多情况下,我们需要在子类中访问父类的名字
就可以用 super().要访问的名字
class Person:
test = '1234' def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender def say_hi(self):
print(self.name,self.age,self.gender) class Student(Person):
def __init__(self,name,age,gender,number):
# self.name = name
# self.age = age
# self.gender = gender
# Person.__init__(self,name,age,gender) # 子类重用父类方法的方式之一 与继承没有任何关系 指名道姓的调用
# super(Student, self).__init__(name,sex,age) # super表示父类的意思 python2中的写法
super().__init__(name,age,gender) # super()会调用父类中的初始化方法 最常用写法
self.number = number
print(super().test) # 调用父类中的属性
def say_hi(self):
super().say_hi()
print(self.number) stu1 = Student("Egon", "woman", 100,"olboy 007")
stu1.say_hi()

面向对象(OPP)的三大特征之 继承的更多相关文章

  1. Python面向对象初始(三大特征,多态,继承,封装)

    Python面向对象的初始 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的 ...

  2. Java的OOP三大特征之一——继承

    Java的OOP三大特征之一——继承 子类继承父类的特征和行为(属性和方法),使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类 ...

  3. Python学习day24-面向对象的三大特征之继承

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  4. JAVA的三大特征 封装继承多态- 简单总结

    简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...

  5. Python面向对象之:三大特性:继承,封装,多态以及类的约束

    前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情 ...

  6. Java三大特征之继承(二)

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  7. PHP其它常用函数;<<<面向对象(OPP)的三大特性:封装、继承、加态:>>> <----面试题 ;构造方法、析构方法,魔术方法、set、get方法;静态;抽象类;接口

    PHP其它常用函数:     赋值:$r->name = "元素";      取值: echo $r->name;  count()   计算数组中的元素数目或对象中 ...

  8. Java面向对象概述及三大特征(封装,继承和多态)

    一.面向对象思想 Java是面向对象的高级语言,对于Java语言来说,万事万物皆对象! 它的基本思想是使用类,对象,继承,封装,消息等基本概念进行程序设计.面向对象程序的最小单元是类,类代表了客观世界 ...

  9. 面向对象三大特征之继承(extends)——Java笔记(六)

    继承:            从一般到特殊的关系,是一种拓展关系,子类对象是父类的一种,也可称为”is a“的关系 泛化:         把子类里的共性抽取到父类里的来的过程 特化:         ...

随机推荐

  1. shell脚本中用到的计算

    在shell脚本中计算一般会涉及到let.$(()).$[].bc(另扩展expr).其中let.$(()).$[]都是用来做基本整数运算,bc可以用来做浮点运算. (1).let.$(()).$[] ...

  2. 二进制安装k8s-单个master节点、两个node--修改版--有个错误:好多地方确少APISERVER

    centos7.4安装k8s-.11版本,二进制 安装 配置系统相关参数 如下操作在所有节点操作 # 临时禁用selinux # 永久关闭 修改/etc/sysconfig/selinux文件设置 s ...

  3. Flutter安卓客户端打包

    想要安装到手机上,必须要进行打包,因为没有苹果手机,所以只能打包Android客户端的apk. 检查 App的配置 查看默认应用程序清单文件(位于/android/app/src/main/中的And ...

  4. 记录一下自己安装Appium的流程

    跟着其他大佬的安装攻略,一步一步来的.过程中遇到了一些问题,也都解决了~ 需要准备的东西: 1.JDK1.8 2.Andriod SDK 3.Node.js 4.Python 5.Appium-pyt ...

  5. 客户端热更新框架之UI热更框架设计(下)

    上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章.本篇就专门针对UI框架的热更新功能实现部分展开讨论,讨论的重点是热更新如何与UI框架进行结合? 现在笔者把设计“UI热更新框架”的整体设计 ...

  6. django 之(二) --- 源码分析

    CBV类视图继承 CBV:继承自View:注册的时候使用的as_view() 入口 不能使用请求方法的名字作为参数的名字 只能接受已经存在的属性对应的参数 定义了一个view 创建了一个类视图对象 保 ...

  7. hanlp分词工具应用案例:商品图自动推荐功能的应用

    本篇分享一个hanlp分词工具应用的案例,简单来说就是做一图库,让商家轻松方便的配置商品的图片,最好是可以一键完成配置的. 先看一下效果图吧: 商品单个推荐效果:匹配度高的放在最前面 这个想法很好,那 ...

  8. SHE姐妹建模记录

    中午11点54分,队长把MD5码提交上去在群里发了截图,我对着屏幕上刚检查完的论文,感觉整个人都轻松起来了,又有点恍惚,可能是这几天都没睡好觉.去楼下吃了顿饭,本来打算回来倒头就睡,睡到几点算几点,醒 ...

  9. Ubuntu 提示sudo: java: command not found解决办法

    ubuntu下运行sudo Java 时提示“sudo: java: command not found”.在网上找了,其中很多方法都提示要修改/etc/profile的配置,或是修改/etc/env ...

  10. python入门pk小游戏

    import time import random flag = True while flag: player_win = 0 enemy_win = 0 for i in range(1, 4): ...