zoukankan      html  css  js  c++  java
  • python之组合与重用性

    1 组合

    组合的概念:软件重用的重要方式除了继承之外还有另外一种方式,即:组合

    组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合

    >>> class Equip: #武器装备类
    
    ...     def fire(self):
    
    ...         print('release Fire skill')
    
    ...
    
    >>> class Riven: #英雄Riven的类,一个英雄需要有装备,因而需要组合Equip类
    
    ...     camp='Noxus'
    
    ...     def __init__(self,nickname):
    
    ...         self.nickname=nickname
    
    ...         self.equip=Equip() #用Equip类产生一个装备,赋值给实例的equip属性
    
    ...
    
    >>> r1=Riven('锐雯雯')
    
    >>> r1.equip.fire() #可以使用组合的类产生的对象所持有的方法
    
    release Fire skill
    

      

    1.1 组合与继承的区别

    组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同,

    1.继承的方式

    通过继承建立了派生类与基类之间的关系,它是一种''的关系,比如白马是马,人是动物。

    当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如

    教授是老师

    >>> class Teacher:
    
    ...     def __init__(self,name,gender):
    
    ...         self.name=name
    
    ...         self.gender=gender
    
    ...     def teach(self):
    
    ...         print('teaching')
    
    ...
    
    >>>
    
    >>> class Professor(Teacher):
    
    ...     pass
    
    ...
    
    >>> p1=Professor('egon','male')
    
    >>> p1.teach()
    
    teaching
    

      

    2.组合的方式

    用组合的方式建立了类与组合的类之间的关系,它是一种‘’的关系,比如教授有生日,

     

     

    教授教python课程

    class BirthDate:
    
        def __init__(self,year,month,day):
    
            self.year=year
    
            self.month=month
    
            self.day=day
    
     
    
    class Couse:
    
        def __init__(self,name,price,period):
    
            self.name=name
    
            self.price=price
    
            self.period=period
    
     
    
    class Teacher:
    
        def __init__(self,name,gender):
    
            self.name=name
    
            self.gender=gender
    
        def teach(self):
    
            print('teaching')
    
    class Professor(Teacher):
    
        def __init__(self,name,gender,birth,course):
    
            Teacher.__init__(self,name,gender)
    
            self.birth=birth
    
            self.course=course
    
     
    
    p1=Professor('egon','male',
    
                 BirthDate('1995','1','27'),
    
                 Couse('python','28000','4 months'))
    
     
    
    print(p1.birth.year,p1.birth.month,p1.birth.day)
    
    print(p1.course.name,p1.course.price,p1.course.period)
    

      

    当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好。

  • 相关阅读:
    Python基础语法 第2节课(数据类型转换、运算符、字符串)
    python基础语法 第5节课 ( if 、 for )
    python基础语法 第4节课 (字典 元组 集合)
    Python基础语法 第3节课 (列表)
    A. Peter and Snow Blower 解析(思維、幾何)
    C. Dima and Salad 解析(思維、DP)
    D. Serval and Rooted Tree (樹狀DP)
    C2. Balanced Removals (Harder) (幾何、思維)
    B. Two Fairs 解析(思維、DFS、組合)
    D. Bash and a Tough Math Puzzle 解析(線段樹、數論)
  • 原文地址:https://www.cnblogs.com/asaka/p/6758407.html
Copyright © 2011-2022 走看看