组合

一. 什么是组合

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

class Foo:
     x=1
class Bar:
    y=2
obj = Foo()
obj.attr=Bar()
print(obj.x)           #1
print(obj.attr.y)      #2

二.为何要用组合

通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起
从而减少类与类之间代码冗余

三.怎么用组合

代码如下,为学生类的对象stu1添加属性(属性的值是课程Course类的对象python)

#父类
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):
        OldboyPeople.__init__(self,name,age,sex)
        self.score=score
        self.course=[]
    def choose_course(self):
        print('%s正在选课'%self.name)
    def tell_all_course(self):
        print('学生[%s]的课程信息如下'%self.name)
        for obj in self.course:
            obj.tell_course()
        print('='*50)
#定义老师类
class OldboyTeacher(OldboyPeople):
    def __init__(self,name,age,sex,level):
        OldboyPeople.__init__(self,name,age,sex)
        self.level=level
        self.course=[]
    def score(self,obj,num):
        obj.score=num
    def tell_all_course(self):
        print('老师[%s]的课程信息如下'%self.name)
        for obj in self.course:
            obj.tell_course()
        print('='*50)
#定义课程类
class Course:
    def __init__(self,c_name,c_price,c_zq):
        self.c_name=c_name
        self.c_price=c_price
        self.c_zq=c_zq
    def tell_course(self):
        print('<课程名:%s  价格:%s  周期:%s>'%(self.c_name,self.c_price,self.c_zq))
#创建对象
python=Course('python','100','10day')
linux=Course('linux','80','15day')
stu1=OldboyStudent('wzj','18','male','100')
tea1=OldboyTeacher('egon','73','male','10')
#添加课程
stu1.course.append(python)
stu1.course.append(linux)
tea1.course.append(python)
#查看课程
stu1.tell_all_course()
tea1.tell_all_course()       
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容