類的組合

1、什麼是組合

  • 組合就是一個類的對象具有某一個屬性,該屬性的值是指向另外外一個類的對象

91-類的組合-tfboys.jpg?x-oss-process=style/watermark

2、爲何用組合

  • 組合是用來解決類與類之間代碼冗餘的問題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}
  • 如上設計了一個選課系統,可是這個選課系統在將來必定是要修改、擴展的,所以咱們須要修改上述的代碼

3、如何用組合

  • 需求:假如咱們須要給學生增添課程屬性,可是又不是全部的老男孩學生一進學校就有課程屬性,課程屬性是學生來老男孩後選出來的,也就是說課程須要後期學生們添加進去的linux運維

  • 實現思路:若是咱們直接在學生中添加課程屬性,那麼學生剛被定義就須要添加課程屬性,這就不符合咱們的要求,所以咱們可使用組合能讓學生將來添加課程屬性設計

91-類的組合-需求.jpg?x-oss-process=style/watermark

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
  • 組合能夠理解成多我的去造一個機器人,有的人造頭、有的人造腳、有的人造手、有的人造軀幹,你們都完工後,造軀幹的人把頭、腳、手拼接到本身的軀幹上,所以一個機器人便造出來了

91-類的組合-機器人.gif

相關文章
相關標籤/搜索