ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学习笔记11

2022-02-28 23:33:56  阅读:153  来源: 互联网

标签:11 关系 聚合 继承 子类 笔记 关联 学习 父类


类与类之间的关系

--------------------------------------------

一.继承

1.单继承

继承是指一个类A能利用另一个类B的资源(包括属性和方法等),其中B类被称为基类(或父类),A类被称为派生类(或子类)。

Python支持单继承和多继承。继承的意思就是子承父业,父类的公开属性和方法,子类都自动继承。继承的语法如下:

class 子类名(父类名):
        语句1
        语句2
        ……
        语句n
        ……

将父类名放在()中,只有一个父类的时候称为单继承。

例:

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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之间的聚合和复合关系图。

 

ps:重写

Python允许子类重写父类中已有的方法,而且不需要特殊的关键字进行说明。比如前面的“猫”类,如果“白猫”类要有自己的miaomiao()方法,就需要做如下改动:

 

那么子类对象调用的就是它自己的miaomiao()。

 

 

 

标签:11,关系,聚合,继承,子类,笔记,关联,学习,父类
来源: https://blog.csdn.net/qq_66545503/article/details/123194570

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有