小白学python------------面向对象之组合

一.什么是组合

组合是一个类的对象的属性是另一个类的对象.通过这个对象可以访问它的属性及它所在类的属性.

好处:减少类与类之间代码的冗余

二.为何用组合

通过给一个类的对象添加属性(属性是另一个类的对象)的方式,间接的把两个类组合/关联在一起.

三.如何用组合

class OldboyPeople:
    school = 'oldboy'

    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


class Courses:

    def __init__(self, cname, cperiod, cprice):
        self.cname = cname
        self.cperiod = cperiod
        self.cprice = cprice

    def course_info(self):
        print('课程:%s 周期:%s 价格:%s' % (self.cname, self.cperiod, self.cprice))


class OldboyStudent(OldboyPeople):

    def __init__(self, name, age, sex, stu1_id):
        OldboyPeople.__init__(self, name, age, sex)
        self.stu1_id = stu1_id
        self.course = []

    def tell_stu_course(self):
        print('%s的课程如下' % self.name)
        for i in self.course:
            i.course_info()


class OldboyTeacher(OldboyPeople):

    def __init__(self, name, age, sex, level):
        OldboyPeople.__init__(self, name, age, sex)
        self.level = level
        self.course = []

    def tell_tea_course(self):
        print('%s的课程如下' % self.name)
        for i in self.course:
            i.course_info()

    def grade(self, obj_name, marks):
        obj_name.marks = marks


# 创建学生和老师
stu1 = OldboyStudent('tom', 18, 'male', 1)
tea1 = OldboyTeacher('egon', 18, 'male', 10)

# 创建两门课程
python = Courses('python', '5mons', 3000)
linux = Courses('linux', '5mons', 2000)
java = Courses('java', '6mons', 8000)

# 将学生,老师和课程互相关联起来

stu1.course.append(python)
stu1.course.append(java)
tea1.course.append(python)


# 一个类的某一个属性的值是另一个类的对象
# stu1.course[0].course_info()
# print(stu1.course[0].author)

# stu1.course[1].course_info()
# print(stu1.course[1].author)


stu1.tell_stu_course()

猜你喜欢

转载自blog.csdn.net/qq_42721964/article/details/81906741