面向对象之组合

面向对象之组合

一、什么是组合

组合是指一个对象中,包含另外一个或多个对象php

二、为何要用组合

减小代码冗余python

三、耦合度

耦合度越高,程序的可扩展性越差app

耦合度越低,程序的可扩展性越高学习

四、组合的的使用

继承:继承是类与类之间的关系,子类继承父类的属性与方法,子类与父类是从属关系code

组合:组合是对象与对象之间的关系,一个对象拥有另外一个或多个对象的属性或方法对象

# 父类
class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

# 学生类
class Student(People):
    def __init__(self,name, age, sex):
        super().__init__(name, age, sex)

    def learn(self):
        print('learning...')

# 老师类
class Teacher(People):
    def __init__(self,name, age, sex):
        super().__init__(name, age, sex)

    def teach(self):
        print('teach...')

# 时间类
class Date:
    def __init__(self,year,month,day):
        self.year = year
        self.month = month
        self.day = day
    def print_date(self):
        print(f'''
            生日为{self.year}年{self.month}月{self.day}日
        ''')

stu_obj = Student('shen',18,'male')
date_obj = Date('2001','8','8')
# 将学生对象中加入日期对象
stu_obj.date_obj = date_obj
# 经过学生对象调用日期对象
stu_obj.date_obj.print_date()

teac_obj = Teacher('王',25,'female')
date_obj = Date('1996','8','8')
# 将老师对象中加入日期对象
teac_obj.date_obj = date_obj
# 经过学生对象调用日期对象
teac_obj.date_obj.print_date()
'''
练习需求:
    选课系统:
        1.有学生、老师类,学生与老师有属性 “名字、年龄、性别、课程”,
        2.有方法 老师与学生能够添加课程, 打印学习/教授课程。

    # 组合实现
'''

class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    #打印生日
    def print_date(self):
        print(f'''
            生日{self.date_obj.year}年{self.date_obj.month}月{self.date_obj.day}日
        ''')
    # 添加课程到课程列表中
    def add_course(self, course_obj):
        self.course_list.append(course_obj)
    # 打印全部课程信息
    def print_all_course(self):
        for course_obj in self.course_list:
            course_obj.print_course_info()

class Student(People):
    def __init__(self,name, age, sex):
        super().__init__(name, age, sex)
        self.course_list = []

class Teacher(People):
    def __init__(self, name, age, sex):
        super().__init__(name, age, sex)
        self.course_list = []

class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

class Course:
    def __init__(self, name, price, period):
        self.name = name
        self.price = price
        self.period = period
    # 打印一条课程信息
    def print_course_info(self):
        print(f'''
                课程名:{self.name} 课程价格:{self.price} 课程周期:{self.period}
           ''')

stu_obj = Student('shen', '18', 'male')
date_obj = Date(2001, 8, 8)
# 经过学生对象打印出生日
stu_obj.date_obj = date_obj
stu_obj.print_date()

course_obj1 = Course('python', '2000', '2')
course_obj2 = Course('php', '1800', '2')

teac_obj = Teacher('wang', 24, 'female')
# 为老师添加课程
teac_obj.add_course(course_obj2)
teac_obj.add_course(course_obj1)
# 打印全部课程信息
teac_obj.print_all_course()
相关文章
相关标签/搜索