首页 > 代码库 > python\组合与重用性

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\组合与重用性