python类的组合

python之类的组合

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

class Foo:
    xxx=111
    pass

class Bar:
    yyy=222
    pass

obj=Foo()
obj.attr=Bar()

obj.xxx
obj.attr.yyy

  

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

class Foo1:
    pass

class Bar:
    pass

obj_from_bar=Bar()
obj1=Foo1()

obj1.attr1=obj_from_bar(在obj1中增加了一个属性,名字为attr1,值为obj_from_bar(类Bar的对象))

  

3. 如何用组合

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

    def choose_course(self):
        print('%s choosing course' % self.name)

class OldboyTeacher(OldboyPeople):
    def __init__(self,name,age,sex,level):
    OldboyPeople.__init__(self,name,age,sex)
    self.level=level

    def score(self,stu,num):
        stu.score=num

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')
java=Course('JAVA',1900,'4mons')


stu1=OldboyStudent('刘二蛋',38,'male')
stu1.course=python #这就是两个类的组合(在stu1这个对象里,加了一个属性,名字为course,值是另一个对象,这样就可以使用另一个对象里的属了)
# print(stu1.__dict__)

stu1.course.tell_info()

tea1=OldboyTeacher('egon',18,'male',10)
tea1.course=python
# print(tea1.__dict__)
tea1.course.tell_info()

  

'''

 

posted on 2018-08-21 17:32  海龟先生  阅读(357)  评论(0编辑  收藏  举报

导航