zoukankan      html  css  js  c++  java
  • 组合

    什么是组合:组合指的是一个对象中,包含另一个或多个对象

    为什么用组合:减少代码的冗余

    继承与组合的区别:

    ​ 继承是类与类的关系,子类继承父类的属性与方法,子类与父类是一种从属关系

    ​ 组合是对象与对象的关系,一个对象拥有另一个对象中的属性与方法,是一种什么有什么的关系

    #组合实现
    class People:
    	def __init__(self, name, age, gender):
            self.name = name
            self.age = age
            self.gender = gender
    
            
    #老师类
    class Teacher(People):
        def __init__(self, name, age, gender):
            super().__init__(name, age, gender)
            
    #学生类
    class Student(People):
        def __init__(self, name, age, gender):
            super().__init__(name, age, gender)
            
    #日期类
    class Date:
        def __init__(self, year, month, day):
            self.year = year
            self.month = month
            self.day = day
            
    	def tell_birth(self):
            print(f'''
            ===== 出生年月日 =====
            年:{self.year}
            月:{self.month}
            日:{self.day}
            
            ''')
    
    stu1 = Student('lll', 18, 'male')
    date_obj = Date(2000, 1, 1)
    #学生对象中包含日期对象
    stu1.date_obj = date_obj
    print(stu1.date_obj.year, stu1.date_obj.month, stu1.date_obj.day)
    #2000 1 1
    stu1.date_obj.tell_birth()
    '''
             ==== 出生日期 ====
               年:2000
               月:1
               日:1
    '''
    
    '''
    练习需求:
        选课系统:
            1.有学生、老师类,学生与老师有属性 “名字、年龄、性别、课程”,
            2.有方法 老师与学生可以添加课程, 打印学习/教授课程。
    
    '''
    
    
    class People:
        def __init__(self, name, age, gender):
            self.name = name
            self.age = age
            self.gender = gender
    
        # 添加课程
        def add_course(self, course_obj):
            self.course_list.append(course_obj)
    
        # 打印当前对象中课程列表里所有课程信息
        def tell_all_course_info(self):
            #从当前对象课程列表中打印出所有课程信息
            for course_obj in self.course_list:
                course_obj.tell_course_info()
    
    
    # 学生类
    class Student(People):
        def __init__(self, name, age, gender):
            super().__init__(name, age, gender)
            # 添加课程列表属性
            self.course_list = []
    
    
    # 老师类
    class Teacher(People):
        def __init__(self, name, age, gender):
            super().__init__(name, age, gender)
            # 添加列表属性
            self.course_list = []
    
    
    # 定义一个课程类,包含课程名称,课程价格,课程周期
    class Course:
    
        def __init__(self, course_name, course_price, course_period):
            self.course_name = course_name
            self.course_price = course_price
            self.course_period = course_period
    
    
        # 定义打印课程信息的方法
        def tell_course_info(self):
            print(f'''
                ====== 课程信息如下 ======
                课程名称:{self.course_name}
                课程价格:{self.course_price}
                课程周期:{self.course_period}
            ''')
    
    
    # 创建学生对象
    stu1 = Student('lll', 18, 'male')
    # 创建课程对象
    python_obj = Course('python', 20000, 6)
    go_obj = Course('go', 30000, 5)
    # 学生调用添加课程功能
    stu1.add_course(python_obj)
    stu1.add_course(go_obj)
    # 学生调用打印功能,打印学生课程列表中所有课程信息
    stu1.tell_all_course_info()
    
  • 相关阅读:
    MMORPG 游戏服务器端设计转载
    OpenFileMapping失败 原因ERROR_FILE_NOT_FOUND
    让程序在崩溃时体面的退出转
    [c\C++]线程函数的比较
    VS2005 2008 2010字体颜色配置方案
    用文件映射(File Mapping)实现进程间内存共享
    [Debug]通过LeakDiag查看内存泄漏
    线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点 转
    VC++ 中使用内存映射文件处理大文件
    透视投影
  • 原文地址:https://www.cnblogs.com/littleb/p/12050911.html
Copyright © 2011-2022 走看看