zoukankan      html  css  js  c++  java
  • 面向对象之组合

    1、含义:组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合。

    class Gun:
        '''武器装备类'''
        def fire(self):
            print("be equiped")
    class Hero:
        '''定义英雄类,需要给英雄提供装备,因此需要组合Gun类'''
        camp = 'Galen'
        def __init__(self,nickname):
            self.nickname = nickname
            self.equip = Gun() # 用Gun类实例化一件装备,赋值给实例的equip属性
    hero1 = Hero('盖伦')
    hero1.equip.fire()

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

      <1>继承的方式

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

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

      <2>组合的方式

        用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,学生有课程,老师有课程。

      示例:

    class People:
        school = 'hgnc'
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
    class Teacher(People):
        def __init__(self,name,age,sex,salary):
            super().__init__(name,age,sex) # 继承
            self.salary = salary        # 派生
    class Student(People):
        def __init__(self,name,age,sex,tuition):
            super().__init__(name,age,sex) #  继承
            self.tuition = tuition         # 派生
    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 course_info(self):
            print('课程《%s》 课程价格《%s》 课程周期《%s》 '%(self.course_name,self.course_price,self.course_period))
    teacher1 = Teacher('夕雨',23,'',6000) #
    student1 = Student('十月',21,'',4000)
    student2 = Student('九月',20,'',4000)
    
    course1 = Course('Python',3000,'6mons')
    course2 = Course('Linux',4000,'4mons')
    
    teacher1.course = course1    # 将对象增加的某一属性定义为另一对象,使之可使用另一对象的功能,即组合
    student1.course = course1
    student2.course = course2
    
    print(teacher1.__dict__) # 查看对象属性
    print(student1.__dict__)
    print(teacher1.course.course_name) # Python
    print(student1.course.course_period) # 6mons
    print(student2.course.course_price) # 4000
    student1.course.course_info() # 课程《Python》 课程价格《3000》 课程周期《6mons》

     

    3、组合适用的场合

      当类之间有显著不同时,而且较小的类是较大的类所需要的组件时,用组合比较好。

  • 相关阅读:
    十天冲刺:第四天
    十天冲刺:第三天
    会议2.3
    会议2.2
    会议2.1
    团队绩效管理
    Alpha版(内部测试版)发布
    意见汇总
    建议汇总
    会议1.10
  • 原文地址:https://www.cnblogs.com/schut/p/8613466.html
Copyright © 2011-2022 走看看