zoukankan      html  css  js  c++  java
  • 第二十九篇 类的组合

    组合

    定义一个人的类,人有头,躯干,手,脚等数据属性,这几个属性又可以是通过一个类实例化的对象,这就是组合。

    用途:

    1. 做关联(类跟类之间没有共同点,但是类与类之间是有联系的,所以,就可以通过组合的方式进行类与类的关联)

    2. 小的组成大的

    class Head:
        pass
    
    class Trunk:
        pass
    
    class Hand:
        pass
    
    class Foot:
        pass
    
    # 什么是组合?
    # 首先,上面定义了头 躯干 手 脚 四个类
    # 其次,定义一个人类Person, 这Person大类是由一个个小类拼接到一起组合而成的这就是组合
    class Person:
        def __init__(self,id_num,name):
            self.id_num=id_num
            self.name=name
            self.hand=Hand()
            self.foot=Foot()
            self.trunk=Trunk()
            self.head=Head()
    
    # 实例化
    p1=Person('62282119xxxxxxxxx','alex')
    组合的结构
    class School:
        def __init__(self,name,addr):
            self.name=name
            self.addr=addr
    
        def zhao_sheng(self):
            print('%s 正在招生' %self.name)
    
    class Course:
        def __init__(self,name,price,period,school):
            self.name=name
            self.price=price
            self.period=period
            self.school=school
    
    # 实例化
    s1=School('农大','北京海淀')
    s2=School('农大','南京')
    s3=School('农大','东京')
    
    c1=Course('linux',10,'1h',s1)
    
    print(c1.__dict__)       # 查看c1有哪些字典属性
    print(c1.school.name)  # 查看c1是哪个学校开设的
    print(s1)
    组合示例

    这就是一个组合的示例,但你会发现,是实例完之后,才会传进来一个学校,不够智能。

    有个新的需求:做个选课系统,就是新建一门课程,就要能能学校关联起来。

    c1=Course('linux',10,'1h',s1)
    # 上面的示例,没有自动关联是因为,实例化的时候,学校s1是被写死的,
    # 只需要把它写活就可以了。
    上面都是示例为啥不能自动关联

    那就写活它,让它自动关联起来吧,目前学的是可以通过input的方式实现

    class School:
        def __init__(self,name,addr):
            self.name=name
            self.addr=addr
    
    
        def zhao_sheng(self):
            print('%s 正在招生' %self.name)
    
    class Course:
        def __init__(self,name,price,period,school):
            self.name=name
            self.price=price
            self.period=period
            self.school=school
    
    
    
    s1=School('农大','北京')
    s2=School('农大','南京')
    s3=School('农大','东京')
    
    msg='''
    1 农大 北京校区
    2 农大 南京校区
    3 农大 东京校区
    '''
    while True:
        print(msg)
        xiao_qu={
            '1':s1,
            '2':s2,
            '3':s3
        }
    
        # 课程信息
        name=input('课程名>>: ')
        price=input('课程费用>>: ')
        period=input('课程周期>>: ')
    
        choice=input('选择学校>>: ')
        school_obj=xiao_qu[choice]  # 学校名
    
        # 实例化
        new_course=Course(name,price,period,school_obj)
        print('课程【%s】属于【%s】%s校区,价格是%s,周期是%s' 
              %(new_course.name, new_course.school.name,new_course.school.addr, new_course.price, new_course.period))
    新建课程就能与学校关联起来
    class School:
        def __init__(self,name,addr):
            self.name=name
            self.addr=addr
            self.course_list=[]
    
        def zhao_sheng(self):
            print('%s 正在招生' %self.name)
    
    class Course:
        def __init__(self,name,price,period):
            self.name=name
            self.price=price
            self.period=period
    
    s1=School('农大','北京')
    s2=School('农大','南京')
    s3=School('农大','东京')
    
    c1=Course('linux',10,'1h')
    c2=Course('python',10,'1h')
    
    # 通过append的方式进行课程与学校的关联
    s1.course_list.append(c1)
    s1.course_list.append(c2)
    print(s1.__dict__)
    
    # 取出课程的名字
    for course_obj in s1.course_list:
        print(course_obj.name,course_obj.price,course_obj.period)
    不用组合,但是实现方式很low啦,最好别用哦
  • 相关阅读:
    Search for a Range 分类: Leetcode(查找) Leetcode(排序) 2015-04-10 15:34 23人阅读 评论(0) 收藏
    First Missing Positive 分类: Leetcode(排序) 2015-04-09 17:13 25人阅读 评论(0) 收藏
    Insertion Sort List 分类: Leetcode(排序) 2015-04-09 11:26 23人阅读 评论(0) 收藏
    Merge k Sorted Lists 分类: Leetcode(树) 2015-04-09 09:35 17人阅读 评论(0) 收藏
    Merge Two Sorted Lists 分类: Leetcode(排序) 2015-04-08 21:59 24人阅读 评论(0) 收藏
    Merge Sorted Array 分类: Leetcode(排序) 2015-04-08 21:52 24人阅读 评论(0) 收藏
    Sum Root to Leaf Numbers 分类: Leetcode(树) 2015-04-04 21:25 27人阅读 评论(0) 收藏
    计算机网络数据链路层次学习
    ArrayList总结及部分源码分析
    抽象类基本概念
  • 原文地址:https://www.cnblogs.com/victorm/p/9314539.html
Copyright © 2011-2022 走看看