组合是指一个对象中,包含另外一个或多个对象php
减小代码冗余python
耦合度越高,程序的可扩展性越差app
耦合度越低,程序的可扩展性越高学习
继承:继承是类与类之间的关系,子类继承父类的属性与方法,子类与父类是从属关系code
组合:组合是对象与对象之间的关系,一个对象拥有另外一个或多个对象的属性或方法对象
# 父类 class People: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex # 学生类 class Student(People): def __init__(self,name, age, sex): super().__init__(name, age, sex) def learn(self): print('learning...') # 老师类 class Teacher(People): def __init__(self,name, age, sex): super().__init__(name, age, sex) def teach(self): print('teach...') # 时间类 class Date: def __init__(self,year,month,day): self.year = year self.month = month self.day = day def print_date(self): print(f''' 生日为{self.year}年{self.month}月{self.day}日 ''') stu_obj = Student('shen',18,'male') date_obj = Date('2001','8','8') # 将学生对象中加入日期对象 stu_obj.date_obj = date_obj # 经过学生对象调用日期对象 stu_obj.date_obj.print_date() teac_obj = Teacher('王',25,'female') date_obj = Date('1996','8','8') # 将老师对象中加入日期对象 teac_obj.date_obj = date_obj # 经过学生对象调用日期对象 teac_obj.date_obj.print_date()
''' 练习需求: 选课系统: 1.有学生、老师类,学生与老师有属性 “名字、年龄、性别、课程”, 2.有方法 老师与学生能够添加课程, 打印学习/教授课程。 # 组合实现 ''' class People: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex #打印生日 def print_date(self): print(f''' 生日{self.date_obj.year}年{self.date_obj.month}月{self.date_obj.day}日 ''') # 添加课程到课程列表中 def add_course(self, course_obj): self.course_list.append(course_obj) # 打印全部课程信息 def print_all_course(self): for course_obj in self.course_list: course_obj.print_course_info() class Student(People): def __init__(self,name, age, sex): super().__init__(name, age, sex) self.course_list = [] class Teacher(People): def __init__(self, name, age, sex): super().__init__(name, age, sex) self.course_list = [] class Date: def __init__(self, year, month, day): self.year = year self.month = month self.day = day class Course: def __init__(self, name, price, period): self.name = name self.price = price self.period = period # 打印一条课程信息 def print_course_info(self): print(f''' 课程名:{self.name} 课程价格:{self.price} 课程周期:{self.period} ''') stu_obj = Student('shen', '18', 'male') date_obj = Date(2001, 8, 8) # 经过学生对象打印出生日 stu_obj.date_obj = date_obj stu_obj.print_date() course_obj1 = Course('python', '2000', '2') course_obj2 = Course('php', '1800', '2') teac_obj = Teacher('wang', 24, 'female') # 为老师添加课程 teac_obj.add_course(course_obj2) teac_obj.add_course(course_obj1) # 打印全部课程信息 teac_obj.print_all_course()