Python基础入门教程:类与类之间的关系

一.类与类之间的依赖关系

大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类,那事物之间存在着相对应的关系,类与类之间也同样如此,在面向对象的世界中. 类与类中存在以下关系:

1. 依赖关系

2. 关联关系

3. 组合关系

4. 聚合关系

5. 继承关系

6. 实现关系

由于python是一门弱类型编程语言,并且所有的对象之间其实都是多态的关系,也就是说,所有的东西都可以当做对象来使用, 所以我们在写代码的时候很容易形成以上关系.首先,我们先看第一种, 也是这些关系中紧密程度最低的一个, 依赖关系.

首先, 我们设计一个场景,还是最初的那个例子,要把大象装冰箱,注意,在这个场景中, 其实是存在了两种事物的, 一个是大象, 大象负责整个事件的掌控者, 还有一个是冰箱, 冰箱负责被大象操纵.

首先, 写出两个类, 一个是大象类, 一个是冰箱类

冰箱的功能非常简单, 只要会开门关门就行了. 但是大象就没那么简单了,想想,大象开门和关门的时候是不是要先找个冰箱啊, 然后呢?  打开冰箱门,是不是打开刚才找到的那个冰箱门, 然后装自己,最后呢? 关冰箱门, 注意, 关的是刚才那个冰箱吧. 也就是说,  开门和关门用的是一个冰箱,并且大象有更换冰箱的权利, 想进哪个冰箱就进哪个冰箱. 这时,  大象类和冰箱类的关系并没有那么的紧密,因为大象可以指定任何一个冰箱. 接下来,我们把代码完善一下.

此时我们说, 大象和冰箱之间就是依赖关系,我用着你,但是你不属于我,  这种关系是最弱的.比如,公司和雇员之间,对于正式员工, 肯定要签订劳动合同,  还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜了. 这里的兼职(临时工) 就属于依赖关系,我用你但是你不属于我.

二.关联关系.组合关系.聚合关系

其实这三个在代码上写法是一样的. 但是, 从含义上是不一样的.

关联关系: 两种事物必须是互相关联的,但是在某些特殊情况下是可以更改和更换的

聚合关系: 属于关联关系中的一种特例,侧重点是xxx和xxx聚合成xxx. 各自有各自的声明周期, 比如电脑,电脑里有CPU, 硬盘, 内存等等,电脑挂了, CPU还是好的,还是完整的个体

组合关系: 属于关联关系中的一种特例, 写法上差不多,组合关系比聚合还要紧密,比如人的大脑, 心脏, 各个器官. 这些器官组合成一个人. 这时人如果挂了,其他的东西也跟着挂了. 首先我们看关联关系: 这个最简单,也是最常用的一种关系. 比如,大家都有男女朋友,男人关联着女朋友,女人关联着男朋友. 这种关系可以是互相的, 也可以是单方面的.

注意,此时Boy和Girl两个类之间就是关联关系,两个类的对象紧密联系着, 其中一个没有了,另一个就孤单的不得了, 关联关系, 其实就是我需要你, 你也属于我,这就是关联关系. 像这样的关系有很多很多,比如,学校和老师之间的关系.

School — 学校

Teacher— 老师

老师必然属于一个学校,换句话说,每个老师肯定有一个指定的工作机构, 就是学校. 那老师的属性中必然关联着学校

想想, 这样的关系如果反过来,一个老师可以选一个学校任职, 那反过来, 一个学校有多少老师呢? 一堆吧? 这样的关系如何来描述呢?

好了,这就是关联关系,当我们在逻辑上出现了, 我需要你,你还得属于我,这种逻辑就是关联关系. 那注意,这种关系的紧密程度比上面的依赖关系要紧密的多,为什么呢? 想想吧

至于组合关系和聚合关系,其实代码上的差别不大,都是把另一个类的对象作为这个类的属性来传递和保存, 只是在含义上会有些许的不同而已.

三.继承关系

在面向对象的世界中存在着继承关系,我们现实中也存在着这样的关系,  我们说过,x是一种y, 那x就可以继承y. 这时理解层面上的,如果上升到代码层面,我们可以这样认为,  子类在不影响父类的程序运行的基础上对父类进行的扩充和扩展. 这里我们可以把父类称为超类或者基类,子类被称为派生类.

首先, 类名和对象默认是可以作为字典的key的

既然可以hash, 那就是说字典的key可以是对象或者类

虽然显示的有点儿诡异,但是是可以用的.

接下来,我们来继续研究继承上的相关内容. 在本节中主要研究一下self,记住,不管方法之间如何进行调用, 类与类之间是何关系, 默认的self都是访问这个方法的对象.

继续:

再来:

总结:self在访问方法的顺序: 永远先找自己的,自己的找不到再找父类的.

接下来. 来难得:

再来,还不够绕.

结论: self就是你访问方法的那个对象,先找自己, 然后在找父类的

四.类中的特殊成员

什么是特殊成员呢?__init_()就是一 个特殊的成员,说白了,带双下划线的那一坨,这些方法在特殊的场景的时候会被自动的执行. 比如,

类名() 会自动执行__init__()

对象() 会自动执行__call__()

对象[key] 会自动执行__getitem__()

对象[key] = value 会自动执行__setitem__()

del 对象[key] 会自动执行 __delitem__()

对象+对象 会自动执行__add__()

with 对象 as 变量 会自动执行__enter__和__exit__

打印对象的时候 会自动执行 __str__

干掉可哈希__hash__ == None 对象就不可哈希了.

abs(对象)  会自动执行__abs__()

bool(对象)会自动执行__bool__()

bytes(对象)会自动执行__bytes__()

float(对象)会自动执行__float__()

int(对象)会自动执行__int__()

对象.index()会自动执行__index__()

len(对象)会自动执行__len__()

next() 会自动执行__next__()

repr()会自动执行__repr__()

round(对象)会自动执行__round__()

copy.对象会自动执行__copy__()

创建对象的真正步骤:

首先, 在执行类名()的时候,系统会自动先执行__new__()来开辟内存. 此时新开辟出来的内存区域是空的, 紧随其后, 系统自动调用__init__()来完成对象的初始化工作,按照时间轴来算.

加载类

开辟内存(__new__)

初始化(__init__)

使用对象干xxxxxxxxx

类似的操作还有很多很多,我们不需要完全刻意的去把所有的特殊成员全都记住,实战中也用不到那么多, 用到了查就是了.

(0)

相关推荐

  • 保鲜猪肉时,直接放冰箱就错了,肉店老板教我一招,放半年不变质

    04:44 下载QQ浏览器查看 冻肉解冻别用热水泡,教你一招,10分钟快速解冻,而且保鲜效果好 02:43 下载QQ浏览器查看 过年保存馒头时,切记不要直接放冰箱,诀窍告诉你,放30天都新鲜 03:3 ...

  • 如何理解类?

    "类"是面向对象中一个重要的概念,有了类我们才能去讨论什么是封装.继承.多态. 什么是类?先看下面这张图片. 现在你看到这张图片后,根据图片中表达的内容造一个句子吧.思考中.... ...

  • 类与对象

    在上一篇文章中,说了什么是类.而在最后留下了一个问题:"汤姆和玛丽把一只大象往一个冰箱里面装".这句话跟类又有什么关系? 通过对比最开始的句子:"一只动物被两个人往一个家 ...

  • python基础入门教程:传参是传值还是传引用

    在此之前先来看看变量和对象的关系:Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是对象.而变量是对象的一个引用(又称为名字或者标签),对象的操作都是通过引用来完成的.例 ...

  • Python有哪些函数?Python基础入门教程

    Python函数,一般指组织好的.可重复使用的.用来实现单一或相关联功能的代码段,Python函数包含系统中自带的一些函数.第三方函数以及用户自定义的函数.那么Python有哪些函数呢?为了方便大家记 ...

  • Python零基础入门教程之语法入门运算符一

    https://m.toutiao.com/is/e8odnt1/ 在上一章中我们知道了什么是变量,了解了变量的定义.变量的命名规则以及变量的赋值.下面让我们一个个来学习Python的运算符. 什么是 ...

  • Python爬虫入门教程(十四):爬取有声小说网站数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  • 什么是Python表达式?Python基础入门

    初学Python的时候,大家都会接触到各种专业术语,比如说表达式.语句等,那么你知道什么是Python表达式吗?Python表达式由什么构成呢?想要知道,这篇文章你一定要看. Python表达式由什么 ...

  • Python爬虫入门教程:豆瓣Top电影爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理.   基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests p ...

  • 最详细的素描基础入门教程,全整理好了,美术生必看!

    很多新人朋友问我怎么学画画,这个不是一句半句能解释清楚的. 想系统学习,还是需要方法与技巧的. 今天,我就分享一套讲解特别详细的素描基础入门教程资料,新人朋友一定要好好看,收藏好了! 来源网络.侵删, ...

  • Python爬虫入门教程02:笔趣阁小说爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 前文 01.python爬虫入门教程01:豆瓣Top电影爬取 基本开发环境 Python 3 ...

  • Python爬虫入门教程01:豆瓣Top电影爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...