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之继承中组合用法与菱形继承关系查找法相关推荐

  1. python pandas模块_Python3.5 Pandas模块中Series用法详解

    Python3.5 Pandas模块中Series用法实例 本文实例讲述了Python3.5 Pandas模块之Series用法.分享给大家供大家参考,具体如下: 1.Pandas模块引入与基本数据结 ...

  2. python pandas筛选数据_Python基础 | pandas中数据的筛选(index subset)

    本文数据可在此处下载,密码:vwy3 # 加载数据 import pandas as pd # 数据是之前在cnblog上抓取的部分文章信息 df = pd.read_csv('./data/SQL测 ...

  3. python数据可视化库_python和r中用于数据可视化的前9个库

    python数据可视化库 In the rapidly growing world of today, when technology is expanding at a rate like neve ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. return在php中用法,细致解读PHP中return用法(附代码)_后端开发

    在大部分编程言语中,return关键字能够将函数的实行效果返回,PHP中return的用法也迥然不同,对初学者来讲,控制PHP中return的用法也是进修PHP的一个入手下手. 起首,它的意义就是返回 ...

  6. java中switch用法举例范围_Java中Switch用法代码示例

    一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样), 在java1.7后 ...

  7. mysql optimize 用法_optimize在mysql中的用法

    optimize命令是mysql的常用优化表碎片的命令,但是在InnoDB与MyISAM这两个存储引擎中却有很大的分别.本文将对这两个常用的存储引擎进行讨论 方法/步骤 1 当对表有大量的增删改操作时 ...

  8. NTC测温中 经典温度查表算法--二分查找法

    说明: 二分查找法的优点:查找速度快 1024个长度的表最长只需10次查表就能得出结果 在用NTC测试温度的方案中,NTC的温度表的长度一般是100-200 有些达到400-500的长度 在这种情况下 ...

  9. python中pos的用法_Python正则式的基本用法

    Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...

最新文章

  1. 国内数十位大佬合作,综述预训练模型的过去、现在与未来
  2. 溯因推理:人工智能的盲点
  3. CTO说了,delete后不加limit,直接滚蛋!
  4. 反射和动态代理实现上下文切入AOP效果
  5. Mongodb副本集--Out of memory: Kill process 37325 (mongod)
  6. 完成AOP 顶层设计-AopConfig
  7. iOS中js与objective-c的交互(转)
  8. python loads_python dumps和loads区别详解
  9. Mysql data type(数据类型)
  10. java vc_vc++与 java有什么不同
  11. Broadcasting in Python
  12. 全网最全的AItium Designer 16下载资源与安装步骤
  13. IT项目的常见风险及应对措施
  14. JavaScript Object Notation对象标记法
  15. 回归方程有效性的检查
  16. 地图编辑器到底是做什么的?今天之后你会对此有个新的了解
  17. 用c语言编程写出杨辉三角,用C语言编写杨辉三角
  18. SpringAOP实现多数据源切换
  19. django学习007-MVT的T(模板)的使用
  20. 赋予物联网以AI能力,阿里云Link推万亿唤醒计划

热门文章

  1. matplotlib 横坐标少了一个点_收藏起来!比 matplotlib 效率高十倍的数据可视化神器!...
  2. 计算机网络期末考长沙学院,校内用-第二套计算机网络试卷A..doc
  3. linux如何安装python环境变量中,Windows和linux环境下python安装及环境变量的配置
  4. 利用js实现 禁用浏览器后退
  5. puppet(2)-资源介绍
  6. 【Linux笔记(000) 】-- 系统启动过程
  7. jQuery全屏滚动插件fullPage.js
  8. 控件列[Coolite]上传文件
  9. activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask
  10. linux系统终端more,一篇文章让你学透Linux系统中的more命令