087 類的組合

1、什麼是組合

組合就是一個對象具備一個屬性,這個屬性的指是另一個類的對象python

2、爲何要使用組合

  • 組合是用來解決類和類之間代碼冗餘問題的
  • 最原始的選課系統
class Person:
    school = 'oldboy'

    
class Teacher(Person):
    # 老師類在實例化的時候設置課程名,課程價格,課程週期
    def __init__(self,name,age,level,course_name,course_price,course_period):
        self.name=name
        self.age=age
        self.level=level

class Student(Person):
    # 學生類在實例化的時候設置課程名,課程價格,課程週期
    def __init__(self,name,age,course,course_name,course_price,course_period):
        self.name=name
        self.age=age
        self.course=course
  • 使用組合事後的選課系統
class Person:
    school = 'oldboy'

    
class Teacher(Person):
    def __init__(self,name,age,level,course):
        self.name=name
        self.age=age
        self.level=level
        #course是課程對象,表示老師教授的課程
        self.course=course

class Student(Person):
    def __init__(self,name,age,course):
        self.name=name
        self.age=age
        # course是課程對象,表示學生選的課程
        self.course = course

class Course:
    # 把這個course類實例化事後,在實例化老師或者學生的時候,看成屬性的值傳遞給老師或學生的course屬性值
    def __init__(self,course_name,course_price,course_period):
        self.name=course_name
        self.price=course_price
        self.period=course_period
        
        
        
course=Course('Python',20180,7) # 實例化課程對象
stu=Student('nick',19,course) # 實例化學生對象:course是課程對象
teacher=Teacher('nick',19,'高級',course) # 實例化老師對象:course是課程對象
#查看老師教授的課程名
print(teacher.course.name)

pythonlinux

  • 終極版本選課系統
  • 能夠讓一個學生選擇多門課程
class Person:
    school = 'oldboy'
class Teacher(Person):
    def __init__(self,name,age,level,course):
        self.name=name
        self.age=age
        self.level=level
        
        #course是課程對象,表示老師教授的課程
        self.course=course

class Student(Person):
    # course=[]  #在這裏定義成course是了列表是錯誤的
    def __init__(self,name,age):
        self.name=name
        self.age=age
        
        # course是課程對象,表示學生選的課程
        self.course_list = []
        
    def choose_course(self,course):
        # self.course=[]  #錯誤
        
        #把課程對象追加到學生選課的列表中
        self.course_list.append(course)

    def tell_all_course(self):
        #循環學生選課列表,每次拿出一個課程對象
        for course in self.course_list:
            #課程對象.name  取到課程名字
            print(course.name)

class Course:
    def __init__(self,course_name,course_price,course_period):
        self.name=course_name
        self.price=course_price
        self.period=course_period



course=Course('Python',20199,7)# 實例化課程對象course
stu1=Student('nick',19) # 實例化學生對象stu1
stu1.choose_course(course)# 調用stu1的選課綁定方法choose_course(course)
# 把實例化的課程對象放到stu1的課程屬性列表裏

stu2=Student('王二丫',19)# 實例化stu2學生對象
stu2.choose_course(course)# 調用stu2的選課綁定方法choose_course(course)
# 把實例化的課程對象放到stu2的課程屬性列表裏

stu2.choose_course(Course('linux',19999,5))
相關文章
相關標籤/搜索