一.什么是组合
组合是一个类的对象的属性是另一个类的对象.通过这个对象可以访问它的属性及它所在类的属性.
好处:减少类与类之间代码的冗余
二.为何用组合
通过给一个类的对象添加属性(属性是另一个类的对象)的方式,间接的把两个类组合/关联在一起.
三.如何用组合
class OldboyPeople:
school = 'oldboy'
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
class Courses:
def __init__(self, cname, cperiod, cprice):
self.cname = cname
self.cperiod = cperiod
self.cprice = cprice
def course_info(self):
print('课程:%s 周期:%s 价格:%s' % (self.cname, self.cperiod, self.cprice))
class OldboyStudent(OldboyPeople):
def __init__(self, name, age, sex, stu1_id):
OldboyPeople.__init__(self, name, age, sex)
self.stu1_id = stu1_id
self.course = []
def tell_stu_course(self):
print('%s的课程如下' % self.name)
for i in self.course:
i.course_info()
class OldboyTeacher(OldboyPeople):
def __init__(self, name, age, sex, level):
OldboyPeople.__init__(self, name, age, sex)
self.level = level
self.course = []
def tell_tea_course(self):
print('%s的课程如下' % self.name)
for i in self.course:
i.course_info()
def grade(self, obj_name, marks):
obj_name.marks = marks
# 创建学生和老师
stu1 = OldboyStudent('tom', 18, 'male', 1)
tea1 = OldboyTeacher('egon', 18, 'male', 10)
# 创建两门课程
python = Courses('python', '5mons', 3000)
linux = Courses('linux', '5mons', 2000)
java = Courses('java', '6mons', 8000)
# 将学生,老师和课程互相关联起来
stu1.course.append(python)
stu1.course.append(java)
tea1.course.append(python)
# 一个类的某一个属性的值是另一个类的对象
# stu1.course[0].course_info()
# print(stu1.course[0].author)
# stu1.course[1].course_info()
# print(stu1.course[1].author)
stu1.tell_stu_course()