欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

组合

程序员文章站 2022-03-07 09:58:30
1. 什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 2. 为何要用组合 通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起 从而减少类与类之间代码冗余 3. 如何用组合 组合与继承都是有效地利用已有类的资源的重要方式。 ......

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