Python类的组合

一、什么是组合

组合就是一个对象具有一个属性,这个属性的指是另外一个类的对象

二、为什么要使用组合

  • 组合是用来解决类和类之间代码冗余问题的
  • 最原始的选课系统
class Person:
	school = 'oldboy'

    
class Teacher(Person):
    # 老师类在实例化的时候设置课程名,课程价格,课程周期
    def __init__(self,name,age,level,course_name,course_price,course_period):
        self.name=name
        self.age=age
        self.level=level

class Student(Person):
    # 学生类在实例化的时候设置课程名,课程价格,课程周期
    def __init__(self,name,age,course,course_name,course_price,course_period):
        self.name=name
        self.age=age
        self.course=course

使用组合过后的选课系统

class Person:
    school = 'oldboy'

    
class Teacher(Person):
    def __init__(self,name,age,level,course):
        self.name=name
        self.age=age
        self.level=level
        #course是课程对象,表示老师教授的课程
        self.course=course

class Student(Person):
    def __init__(self,name,age,course):
        self.name=name
        self.age=age
        # course是课程对象,表示学生选的课程
        self.course = course

class Course:
    # 把这个course类实例化过后,在实例化老师或者学生的时候,当作属性的值传递给老师或学生的course属性值
    def __init__(self,course_name,course_price,course_period):
        self.name=course_name
        self.price=course_price
        self.period=course_period
        
        
        
course=Course('Python',20180,7) # 实例化课程对象
stu=Student('nick',19,course) # 实例化学生对象:course是课程对象
teacher=Teacher('nick',19,'高级',course) # 实例化老师对象:course是课程对象
#查看老师教授的课程名
print(teacher.course.name)

python

  • 终极版本选课系统
  • 可以让一个学生选择多门课程
class Person:
    school = 'oldboy'
class Teacher(Person):
    def __init__(self,name,age,level,course):
        self.name=name
        self.age=age
        self.level=level
        
        #course是课程对象,表示老师教授的课程
        self.course=course

class Student(Person):
    # course=[]  #在这里定义成course是了列表是错误的
    def __init__(self,name,age):
        self.name=name
        self.age=age
        
        # course是课程对象,表示学生选的课程
        self.course_list = []
        
    def choose_course(self,course):
        # self.course=[]  #错误
        
        #把课程对象追加到学生选课的列表中
        self.course_list.append(course)

    def tell_all_course(self):
        #循环学生选课列表,每次拿出一个课程对象
        for course in self.course_list:
            #课程对象.name  取到课程名字
            print(course.name)

class Course:
    def __init__(self,course_name,course_price,course_period):
        self.name=course_name
        self.price=course_price
        self.period=course_period



course=Course('Python',20199,7)# 实例化课程对象course
stu1=Student('nick',19) # 实例化学生对象stu1
stu1.choose_course(course)# 调用stu1的选课绑定方法choose_course(course)
# 把实例化的课程对象放到stu1的课程属性列表里

stu2=Student('王二丫',19)# 实例化stu2学生对象
stu2.choose_course(course)# 调用stu2的选课绑定方法choose_course(course)
# 把实例化的课程对象放到stu2的课程属性列表里

stu2.choose_course(Course('linux',19999,5))
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值