组合python
1.什么是组合linux
组合就是一个类的对象具有一个指向另一个类的对象的属性app
2.为什么用组合spa
组合能够减小代码冗余code
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()
菱形继承问题 非菱形继承都是深度优先blog
1.什么是菱形继承问题?继承
一个子类继承多个父类,最终继承同一个类it
2.python2中分经典类和新式类io
经典类按深度优先查找属性
新式类按广度优先查找属性
注意:按照发起查找的类为准,父类中既有新式类,又有经典类与查找的方式无关
在子类派生出的新功能中,重用父类功能的方式有两种
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推荐使用鸭子类型。