组合

1.什么是组合

组合就是一个类的对象具备一个指向另外一个类的对象的属性

2.为何用组合

组合可以减少代码冗余

3.如何使用

class People:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
class Course:
def __init__(self,name,period,price):
self.name=name
self.period=period
self.price=price
def tell_info(self):
print('<%s %s %s>' %(self.name,self.period,self.price))
class Teacher(People):
def __init__(self,name,age,sex,job_title):
People.__init__(self,name,age,sex)
self.job_title=job_title
self.course=[]
self.students=[]
class Student(People):
def __init__(self,name,age,sex):
People.__init__(self,name,age,sex)
self.course=[]
egon=Teacher('egon',18,'male','沙河霸道金牌讲师')
s1=Student('牛榴弹',18,'female') python=Course('python','3mons',3000.0)
linux=Course('python','3mons',3000.0) #为老师egon和学生s1添加课程
egon.course.append(python)
egon.course.append(linux)
s1.course.append(python)
#为老师egon添加学生s1
egon.students.append(s1) #使用
for obj in egon.course:
obj.tell_info()

菱形继承问题        非菱形继承都是深度优先

1.什么是菱形继承问题?

一个子类继承多个父类,最终继承同一个类

2.python2中分经典类和新式类

经典类按深度优先查找属性

新式类按广度优先查找属性

注意:按照发起查找的类为准,父类中既有新式类,又有经典类与查找的方式无关

在子类派生出的新功能中,重用父类功能的方式有两种

1.指名道姓地访问(与继承无关)

2.严格依赖继承属性的查找关系

super()会得到一个特殊的对象,该对象就是专门用来访问父类中的属性的(按照继承关系)

super()__init__(name,age,) 不需要传self,已经自动传入

注意:在python2中需要写完整super(自己的类名,self)__init__(name,age,)

super()谁查找就会以谁的mro()为准,碰到super()会按当前的位置继续往后找

多态与多态性

1.什么是多态与多态性?

多态指的是同一种事物的各种形态

如水可以有固态,液态,气态

多态性:继承同一个类的多个子类中有相同的方法名,那么子类产生的对象都能不考虑具体的类型而直接调用父类的功能

抽象类

import abc #利用abc模块实现抽象类

class All_file(metaclass=abc.ABCMeta):  # 用于限制子类的定义

all_type='file'

@abc.abstractmethod #定义抽象方法,无需实现功能

def read(self):

'子类必须定义读功能'

Pass

python中不推荐使用抽象类,python推荐使用鸭子类型。

最新文章

  1. Java底层实现 - CPU术语
  2. 基本类型和引用类型调用是的区别(Object.create)
  3. 【仿真】【modelsim】:verilog功能仿真流程
  4. 2 Orchard汉化资源包的使用
  5. ASP.Net网站程序在编译发布部署后的后期修改
  6. 夺命雷公狗---微信开发56----微信js-sdk接口开发(3)所有接口功能
  7. 在 WPF 程序中使用 MVVM 模式
  8. 1到n数组,和为指定数所有序列问题
  9. linux ssh 无密码登陆
  10. JavaScript学习笔记——简单无缝循环滚动展示图片的实现
  11. Scope Directive
  12. MySQL 5.5 禁用 innodb
  13. Java课程设计 购物车系统(个人博客)
  14. MySQL索引 - 索引的类型
  15. gogs详细配置
  16. 通信(二):进程间通信之socket
  17. 客户端缓存机制 - Cookie详解
  18. Django获取数据库数据时根据id筛选
  19. 【SpringMVC学习07】SpringMVC中的统一异常处理
  20. 什么是mvc?

热门文章

  1. Android Studio注意事项
  2. springcloud基于ribbon的canary路由方案
  3. python基础===* 解包,格式化输出和print的一点知识
  4. Python爬虫之百度API调用
  5. SVN--版本控制系统
  6. MACBOOK 总是断网怎么办
  7. 构造函数、原型对象prototype、实例、隐式原型__proto__的理解
  8. NFS+inotify实时同步
  9. JS页面之间传值
  10. Django视图之ORM更改数据库连接——配置MySQL库