python的继承用法_python之继承中组合用法与菱形继承关系查找法
1.什么是组合
组合就是一个类的对象具备某一属性,该属性的值是指向另外外一个类的对象
2.为什么用组合
组合也是用来解决类与类之间代码冗余问题
3.用法
class Course: #组合
def __init__(self, name, period, price):
self.name = name
self.period = period
self.price = price
def tell_info(self):
msg = """
课程名:%s
课程周期:%s
课程价钱:%s
""" % (self.name, self.period, self.price)
print(msg)
class OldboyPeople: #父类
school = 'oldboy'
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
class OldboyStudent(OldboyPeople): 子类
def __init__(self, name, age, sex, stu_id):
OldboyPeople.__init__(self, name, age, sex)
self.stu_id = stu_id
def choose_course(self):
print('%s is choosing course' % self.name)
class OldboyTeacher(OldboyPeople): #子类
def __init__(self, name, age, sex, level):
OldboyPeople.__init__(self, name, age, sex)
self.level = level
def score(self, stu, num):
stu.score = num
print('老师[%s]为学生[%s]打分[%s]' % (self.name, stu.name, num))
# 创造课程
python = Course('python全栈开发', '5mons', 3000)
linux = Course('linux运维', '5mons', 800)
# python.tell_info()
# linux.tell_info()
# 创造学生与老师
stu1 = OldboyStudent('猪哥', 19, 'male', 1)
tea1 = OldboyTeacher('egon', 18, 'male', 10)
# 将学生、老师与课程对象关联/组合
stu1.course = python #把课程python对象内存地址添加到stu1对象名称空间中,之后可以直接调用到course中的函数
print(stu1.__dict__)
tea1.course = linux
stu1.course.tell_info() 直接用绑定方法调用组合里面的函数属性
tea1.course.tell_info()
二.菱形继承关系查找法
1.菱形继承
当一个子类继承多个父类时,多个父类最终继承了同一个类,称之为菱形继承
2.菱形继承的问题:
python2区分经典类与新式类,如果子类继承的是一个菱形继承,那么经典类与新式类的区别是:
经典类下查找属性为:深度优先查找(先一条道走到底,在找别的父类)
新式类下查找属性为:广度优先查找(先每条道的找,最后一条道就查找到底)
python2中经典类
python3中新式类
继承原理:
python到底是如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表,例如
__mro__查看继承查找
class A(object):
def test(self):
print('from A')
class B(A):
def test(self):
print('from B')
class C(A):
def test(self):
print('from C')
class D(B):
def test(self):
print('from D')
class E(C):
def test(self):
print('from E')
class F(D,E):
# def test(self):
# print('from F')
pass
f1=F()
f1.test()
print(F.__mro__) #只有新式才有这个属性可以查看线性列表,经典类没有这个属性
#新式类继承顺序:F->D->B->E->C->A
#经典类继承顺序:F->D->B->A->E->C
#python3中统一都是新式类
#pyhon2中才分新式类与经典类
继承顺序
>>> F.mro() #等同于F.__mro__
[, , , , , , ]
所有父类的MRO列表并遵循如下三条准则:
1.子类会先于父类被检查
2.多个父类会根据它们在列表中的顺序被检查
3.如果对下一个类存在两个合法的选择,选择第一个父类
python的继承用法_python之继承中组合用法与菱形继承关系查找法相关推荐
- python pandas模块_Python3.5 Pandas模块中Series用法详解
Python3.5 Pandas模块中Series用法实例 本文实例讲述了Python3.5 Pandas模块之Series用法.分享给大家供大家参考,具体如下: 1.Pandas模块引入与基本数据结 ...
- python pandas筛选数据_Python基础 | pandas中数据的筛选(index subset)
本文数据可在此处下载,密码:vwy3 # 加载数据 import pandas as pd # 数据是之前在cnblog上抓取的部分文章信息 df = pd.read_csv('./data/SQL测 ...
- python数据可视化库_python和r中用于数据可视化的前9个库
python数据可视化库 In the rapidly growing world of today, when technology is expanding at a rate like neve ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- return在php中用法,细致解读PHP中return用法(附代码)_后端开发
在大部分编程言语中,return关键字能够将函数的实行效果返回,PHP中return的用法也迥然不同,对初学者来讲,控制PHP中return的用法也是进修PHP的一个入手下手. 起首,它的意义就是返回 ...
- java中switch用法举例范围_Java中Switch用法代码示例
一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样), 在java1.7后 ...
- mysql optimize 用法_optimize在mysql中的用法
optimize命令是mysql的常用优化表碎片的命令,但是在InnoDB与MyISAM这两个存储引擎中却有很大的分别.本文将对这两个常用的存储引擎进行讨论 方法/步骤 1 当对表有大量的增删改操作时 ...
- NTC测温中 经典温度查表算法--二分查找法
说明: 二分查找法的优点:查找速度快 1024个长度的表最长只需10次查表就能得出结果 在用NTC测试温度的方案中,NTC的温度表的长度一般是100-200 有些达到400-500的长度 在这种情况下 ...
- python中pos的用法_Python正则式的基本用法
Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...
最新文章
- 国内数十位大佬合作,综述预训练模型的过去、现在与未来
- 溯因推理:人工智能的盲点
- CTO说了,delete后不加limit,直接滚蛋!
- 反射和动态代理实现上下文切入AOP效果
- Mongodb副本集--Out of memory: Kill process 37325 (mongod)
- 完成AOP 顶层设计-AopConfig
- iOS中js与objective-c的交互(转)
- python loads_python dumps和loads区别详解
- Mysql data type(数据类型)
- java vc_vc++与 java有什么不同
- Broadcasting in Python
- 全网最全的AItium Designer 16下载资源与安装步骤
- IT项目的常见风险及应对措施
- JavaScript Object Notation对象标记法
- 回归方程有效性的检查
- 地图编辑器到底是做什么的?今天之后你会对此有个新的了解
- 用c语言编程写出杨辉三角,用C语言编写杨辉三角
- SpringAOP实现多数据源切换
- django学习007-MVT的T(模板)的使用
- 赋予物联网以AI能力,阿里云Link推万亿唤醒计划
热门文章
- matplotlib 横坐标少了一个点_收藏起来!比 matplotlib 效率高十倍的数据可视化神器!...
- 计算机网络期末考长沙学院,校内用-第二套计算机网络试卷A..doc
- linux如何安装python环境变量中,Windows和linux环境下python安装及环境变量的配置
- 利用js实现 禁用浏览器后退
- puppet(2)-资源介绍
- 【Linux笔记(000) 】-- 系统启动过程
- jQuery全屏滚动插件fullPage.js
- 控件列[Coolite]上传文件
- activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask
- linux系统终端more,一篇文章让你学透Linux系统中的more命令