• 组合


    1. 什么是组合

        组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象

    2. 为何要用组合

        通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起

        从而减少类与类之间代码冗余

    3. 如何用组合

    组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同,

    1.继承的方式

    通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。

    当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人

    2.组合的方式

    用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python和linux课程,教授有学生s1、s2、s3...

    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,score=0):
            OldboyPeople.__init__(self,name,age,sex)
            self.score = score
            self.courses=[]
    
        def choose_course(self):
            print('%s choosing course' % self.name)
    
        def tell_all_course(self):
            print(('学生[%s]选修的课程如下' %self.name).center(50,'='))
            for obj in self.courses:
                obj.tell_info()
            print('='*60)
    
    class OldboyTeacher(OldboyPeople):
        def __init__(self,name,age,sex,level):
            OldboyPeople.__init__(self,name,age,sex)
            self.level=level
            self.courses=[]
    
        def score(self,stu,num):
            stu.score=num
    
        def tell_all_course(self):
            print(('老师[%s]教授的课程如下' %self.name).center(50,'*'))
            for obj in self.courses:
                obj.tell_info()
            print('*'*70)
    
    class Course:
        def __init__(self,c_name,c_price,c_period):
            self.c_name = c_name
            self.c_price = c_price
            self.c_period = c_period
    
        def tell_info(self):
            print('<课程名:%s 价钱:%s 周期:%s>' %(self.c_name,self.c_price,self.c_period))
    
    # 创建课程对象
    python=Course('python全栈开发',1900,'5mons')
    linux=Course('linux架构师',900,'3mons')
    
    
    stu1=OldboyStudent('刘二蛋',38,'male')
    stu1.courses.append(python)
    stu1.courses.append(linux)
    # print(stu1.courses)
    stu1.tell_all_course()
    
    
    tea1=OldboyTeacher('egon',18,'male',10)
    tea1.courses.append(python)
    # print(tea1.courses)
    tea1.tell_all_course()
    View Code
  • 相关阅读:
    springboot与mybatisplus集成原理
    《金字塔原理》读书笔记
    域内LDAP学习
    域内委派攻击
    域内ACL攻防
    域内用户与机器用户
    BloodHound分析域结构
    Net MVC内存马
    计算机网络再次整理————socket[一]
    计算机网络再次整理————tcp例子[五]
  • 原文地址:https://www.cnblogs.com/xuecaichang/p/9513213.html
Copyright © 2020-2023  润新知