码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象之组合

时间:2018-03-21 00:09:42      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:比较   组件   school   super   不同   price   实例   pytho   很多   

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、组合适用的场合

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

面向对象之组合

标签:比较   组件   school   super   不同   price   实例   pytho   很多   

原文地址:https://www.cnblogs.com/schut/p/8613466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!