什么是组合:组合指的是一个对象中,包含另一个或多个对象
为什么用组合:减少代码的冗余
继承与组合的区别:
继承是类与类的关系,子类继承父类的属性与方法,子类与父类是一种从属关系
组合是对象与对象的关系,一个对象拥有另一个对象中的属性与方法,是一种什么有什么的关系
#组合实现
class People:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
#老师类
class Teacher(People):
def __init__(self, name, age, gender):
super().__init__(name, age, gender)
#学生类
class Student(People):
def __init__(self, name, age, gender):
super().__init__(name, age, gender)
#日期类
class Date:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
def tell_birth(self):
print(f'''
===== 出生年月日 =====
年:{self.year}
月:{self.month}
日:{self.day}
''')
stu1 = Student('lll', 18, 'male')
date_obj = Date(2000, 1, 1)
#学生对象中包含日期对象
stu1.date_obj = date_obj
print(stu1.date_obj.year, stu1.date_obj.month, stu1.date_obj.day)
#2000 1 1
stu1.date_obj.tell_birth()
'''
==== 出生日期 ====
年:2000
月:1
日:1
'''
'''
练习需求:
选课系统:
1.有学生、老师类,学生与老师有属性 “名字、年龄、性别、课程”,
2.有方法 老师与学生可以添加课程, 打印学习/教授课程。
'''
class People:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 添加课程
def add_course(self, course_obj):
self.course_list.append(course_obj)
# 打印当前对象中课程列表里所有课程信息
def tell_all_course_info(self):
#从当前对象课程列表中打印出所有课程信息
for course_obj in self.course_list:
course_obj.tell_course_info()
# 学生类
class Student(People):
def __init__(self, name, age, gender):
super().__init__(name, age, gender)
# 添加课程列表属性
self.course_list = []
# 老师类
class Teacher(People):
def __init__(self, name, age, gender):
super().__init__(name, age, gender)
# 添加列表属性
self.course_list = []
# 定义一个课程类,包含课程名称,课程价格,课程周期
class Course:
def __init__(self, course_name, course_price, course_period):
self.course_name = course_name
self.course_price = course_price
self.course_period = course_period
# 定义打印课程信息的方法
def tell_course_info(self):
print(f'''
====== 课程信息如下 ======
课程名称:{self.course_name}
课程价格:{self.course_price}
课程周期:{self.course_period}
''')
# 创建学生对象
stu1 = Student('lll', 18, 'male')
# 创建课程对象
python_obj = Course('python', 20000, 6)
go_obj = Course('go', 30000, 5)
# 学生调用添加课程功能
stu1.add_course(python_obj)
stu1.add_course(go_obj)
# 学生调用打印功能,打印学生课程列表中所有课程信息
stu1.tell_all_course_info()