1. 什么是继承
继承是一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类/基类/超类 继承有3个特点:
1. 子类可以遗传/重用父类的属性(解决类与类之间代码冗余的问题)
2. 在python中一个子类可以同时继承多个父类
3. 在继承的背景下,类分为两种:新式类,经典类
新式类:但凡继承object类的子类,以及该子类的子子孙孙都是新式类
在python3中一个类即便是没有显式地继承任何类,默认就继承object类,
即在python3中所有类都是新式类
经典类:没有继承object类的子类,以及该子类的子子孙孙都是经典类
强调:只有在python2中才有经典类
在python2中如果一个类没有显式地继承任何类,并不会自动继承object类 2. 为何要用继承:减少类与类之间的代码冗余 3. 如何继承 :先抽象再继承
# 在python中继承的特点?单继承(用一个父类)&多继承(用多个父类) x = 2
class Foo:
x = 1
pass
obj = Foo()
obj.x = 3 print(obj.x) 4. 属性查找
在没有出现菱形继承的情况下,属性的查找是按照从左往右的顺序一个分支一个分支的找下去
在单继承背景下,无论是新式类还是经典类属性查找顺序都一样
先obj->类->父类->... 在出现菱形继承(一个子类继承的多个分支最终汇聚到一个非object类)的情况下,
在多继承背景下,如果一个子类继承了多个分支,但是多个分支最终汇聚到一个非object类(菱形继承问题)
面试常问问题*****
新式类(.mro()):广度优先查找,按照从左往右的顺序一个分支一个分支的找下去,在最后一个分支才去查找顶级类
obj->A->B->E->C->F->D->G->object
经典类:深度优先查找,按照从左往右的顺序一个分支一个分支的找下去,在第一个分支就查找顶级类
obj->A->B->E->G->C->F->D 5. 派生
在子类中定义自己的属性,如果与父类的属性重名,那以自己的为准. 在子类派生的新方法中重用父类的功能:
方式一:指名道姓地调用某一个类的函数
特点:
1. 与继承无关
2. 没有自动传值的效果 class OldboyPerson:#父类
school="oldboy"
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.gender=gender class Teacher(OldboyPerson):#子类
def __init__(self,name,age,gender,level,salary):
OldboyPerson.__init__(self,name,age,gender)
self.level = level
self.salary = salary 方式二:super()得到一个特殊的对象,该对象专门用来引用父类的属性
特点:
1. 严格依赖继承,super会完全参照类的mro列表依次查找属性
2. 有自动传值的效果
方式一种的:OldboyPerson.__init__(self,name,age,gender)
替换为:super(Teacher, self).__init__(name,age,gender)

最新文章

  1. Java为什么能跨平台运行
  2. MRBS, meeting room manager system,会议预定管理系统
  3. Windows下查看机器监听端口
  4. UVa 1658 (拆点法 最小费用流) Admiral
  5. PHP中的全局变量$_SERVER
  6. 【原】Spark Standalone如何通过start-all.sh启动集群
  7. verilog 数组参数
  8. jquery学习 (3)文本框获取焦点之后变换样式
  9. JS动态引入js、CSS动态创建script/link/style标签
  10. django新手第一课
  11. .net core使用Ku.Core.Extensions.Layui实现layui表单渲染
  12. spark-sql jdbc操作mysql
  13. Flask实战-留言板-使用Bootstrap-Flask简化页面编写
  14. yml多环境配置
  15. https://www.cnblogs.com/h2zZhou/p/5440271.html
  16. 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)
  17. window cmd-常用命令
  18. hasattr() getattr() setattr() 函数使用方法
  19. soapUI 使用soapUI测试http+json协议接口简介
  20. Top 10 Javascript MVC 框架

热门文章

  1. java NIO 直接与非直接缓冲区
  2. tp3 save操作小bug误区
  3. pyglet--旋转的矩形
  4. CodeForces892E 可撤销并查集/最小生成树
  5. Spring_bean的实例化时机
  6. 函数和常用模块【day04】:函数的非固定参数(三)
  7. 设计模式---单一职责模式之桥模式(Bridge)
  8. jmeter使用正则表达式匹配多个中的响应结果
  9. C++字符串(srtring)反转
  10. 二、主目录 Makefile 分析(1)