--------------------------------------------
1.单继承
继承是指一个类A能利用另一个类B的资源(包括属性和方法等),其中B类被称为基类(或父类),A类被称为派生类(或子类)。
Python支持单继承和多继承。继承的意思就是子承父业,父类的公开属性和方法,子类都自动继承。继承的语法如下:
class 子类名(父类名):
语句1
语句2
……
语句n
……
将父类名放在()中,只有一个父类的时候称为单继承。
例:
2.多继承
一个子类可以同时有两个或以上的父类,这种称为多继承。多继承的语法如下:
class 子类名(父类名1, 父类名2….):
语句1
语句2
……
语句n
例:
在Python中,当几个父类都具备某个方法(或属性)时,会按子类继承父类时的顺序依次查找同名的方法,先找到谁就执行谁的方法。
1.依赖
依赖具有某种偶然性,表现在代码上,为依赖的类的某个方法以被依赖的类作为其参数。如果A依赖于B,那就意味着B的变化可能要求A也发生变化,在UML图中,一般用一个带虚线的箭头表示,以人借船过河为例,UML图如图所示。
根据这个图,在Python中的代码实现如下:
在上面的代码中有两个类:Person类和Boat类。Person类的方法gobyboat需要boat作为参数传入,这样才能调用boat的过河(overriver)方法,这就叫依赖,Person依赖于Boat。
2.关联
所谓关联,就是表示相识关系,比如类A知道类B的存在,类A可以调用类B的属性和方法。在UML图中,一般用没有箭头的实线表示。关联关系有单向关联、双向关联、自我关联等各种关系。
Python代码实现上,一般关联关系都是一个类作为另一个类的成员属性,例如:
上面是关联关系的代码举例,company类有属性employee,所有company可以通过employee访问employee的属性和方法,关联关系要比依赖关系更加紧密,因此又把依赖关系称之为弱关联。
聚合和复合(组合)也是类的关系之一。聚合与组合其实都是关联的特例,都是整体和部分的关系。它们的区别在于聚合的两个对象之间是可分离的,它们具有各自的生命周期;组合往往表现为一种唇齿相依的关系。实际上,这两种关系语法上是一样的,区别在于语义。在语法上,都是将另一个类作为自己的属性,这样就叫聚合或复合,例如下面的代码:
>>> class A:
... pass
...
>>> class B:
... pass
...
>>> class C:
... a=A()
... b=B()
>>>class D:
… b=B()
上面的代码中,因为类C有两个属性a和b,所以C和A、B的关系就是聚合,C是将A、B类聚合到自己身上,同时B类还作为D类的一部分,而A只能作为类C的一部分,那么类C和A就是生死与共的关系,没有C就不存在A(因为A只给C当属性使用),因此A和C是复合(组合)关系,B和A是聚合关系。
在UML中,聚合关系用一个空心菱形带实线表示,复合关系用一个实心菱形带实线表示,如图所示为类A、B、C、D之间的聚合和复合关系图。
Python允许子类重写父类中已有的方法,而且不需要特殊的关键字进行说明。比如前面的“猫”类,如果“白猫”类要有自己的miaomiao()方法,就需要做如下改动:
那么子类对象调用的就是它自己的miaomiao()。