組合是用來解決類與類之間代碼冗餘的問題linux
首先咱們先寫一個簡單版的選課系統運維
class OldboyPeople: school = 'oldboy' def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex class OldboyStudent(OldboyPeople): def __init__(self, name, age, sex, stu_id): OldboyPeople.__init__(self, name, age, sex) self.stu_id = stu_id def choose_course(self): print('%s is choosing course' % self.name) class OldboyTeacher(OldboyPeople): def __init__(self, name, age, sex, level): OldboyPeople.__init__(self, name, age, sex) self.level = level def score(self, stu, num): stu.score = num print('老師[%s]爲學生[%s]打分[%s]' % (self.name, stu.name, num)) stu1 = OldboyStudent('tank', 19, 'male', 1) tea1 = OldboyTeacher('nick', 18, 'male', 10)
stu1.choose_course()
tank is choosing course
tea1.score(stu1, 100)
老師[nick]爲學生[tank]打分[100]
print(stu1.__dict__)
{'name': 'tank', 'age': 19, 'sex': 'male', 'stu_id': 1, 'score': 100}
需求:假如咱們須要給學生增添課程屬性,可是又不是全部的老男孩學生一進學校就有課程屬性,課程屬性是學生來老男孩後選出來的,也就是說課程須要後期學生們添加進去的linux運維
實現思路:若是咱們直接在學生中添加課程屬性,那麼學生剛被定義就須要添加課程屬性,這就不符合咱們的要求,所以咱們可使用組合能讓學生將來添加課程屬性設計
class Course: def __init__(self, name, period, price): self.name = name self.period = period self.price = price def tell_info(self): msg = """ 課程名:%s 課程週期:%s 課程價錢:%s """ % (self.name, self.period, self.price) print(msg) class OldboyPeople: school = 'oldboy' def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex class OldboyStudent(OldboyPeople): def __init__(self, name, age, sex, stu_id): OldboyPeople.__init__(self, name, age, sex) self.stu_id = stu_id def choose_course(self): print('%s is choosing course' % self.name) class OldboyTeacher(OldboyPeople): def __init__(self, name, age, sex, level): OldboyPeople.__init__(self, name, age, sex) self.level = level def score(self, stu, num): stu.score = num print('老師[%s]爲學生[%s]打分[%s]' % (self.name, stu.name, num))
# 創造課程 python = Course('python全棧開發', '5mons', 3000) python.tell_info()
課程名:python全棧開發 課程週期:5mons 課程價錢:3000
linux = Course('linux運維', '5mons', 800) linux.tell_info()
課程名:linux運維 課程週期:5mons 課程價錢:800
# 創造學生與老師 stu1 = OldboyStudent('tank', 19, 'male', 1) tea1 = OldboyTeacher('nick', 18, 'male', 10)
# 將學生、老師與課程對象關聯/組合 stu1.course = python tea1.course = linux
stu1.course.tell_info()
課程名:python全棧開發 課程週期:5mons 課程價錢:3000
tea1.course.tell_info()
課程名:linux運維 課程週期:5mons 課程價錢:800