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

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

 1 class Elphant:
 2     def __init__(self, name):
 3         self.name = name
 4
 5     def open(self, ref):
 6         print("大象要开门了. 默念三声. 开!")
 7         # 由外界传递进来一个冰箱, 让冰箱开门. 这时. 大象不用背着冰箱到处跑.
 8         # 类与类之间的关系也就不那么的紧密了. 换句话说. 只要是有open_door()方法的对象. 都可以接收运行
 9         ref.open_door()
10
11
12     def close(self, ref):
13         print("大象要关门了. 默念三声. 关!")
14         pass
15
16     def take(self):
17         print("钻进去")
18
19
20 class Refrigerator:
21
22     def open_door(self):
23         print("冰箱门被打开了")
24     def close_door(self):
25         print("冰箱门被关上了")
26
27
28 # 造冰箱
29 r = Refrigerator()
30
31 # 造大象
32 el = Elphant("神奇的大象")
33 el.open(r) # 注意. 此时是把一个冰箱作为参数传递进去了. 也就是说. 大象可以指定任何一个冰箱.
34 el.take()
35 el.close(r)

大象进冰箱

二、关联关系、组合关系、聚合关系

  1.关联关系:两种事物必须是互相关联的,但是在某些特殊情况下是可以更改和更换的。此时类与类之间的关系是最轻的

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

  3.组合关系:属于关联关系中的一种特例,写法上差不多,组合关系比聚合还要紧密,比如人的大脑,心脏,各个器官,这些器官组合成一个人,这是人如果挂了,其他东西也跟着挂了。

三、继承关系

  在面向对象的世界中存在着继承关系. 我们现实中也存在着这样的关系. 我们说过. x是一种y, 那x就可以继承y。

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

class Foo:def __init__(self):passdef method(self):pass# __hash__ = Noneprint(hash(Foo))
print(hash(Foo()))

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

dic = {}
dic[Foo] = 123
dic[Foo()] = 456
print(dic) # {<class '__main__.Foo'>: 123, <__main__.Foo object at 0x103491550>: 456}

  接下来. 我们来继续研究继承上的相关内容. 在本节中主要研究一下self. 记住. 不管方法之

间如何进行调用. 类与类之间是何关系. 默认的self都是访问这个方法的对象.

class Base:def __init__(self, num):self.num = numdef func1(self):print(self.num)self.func2()def func2(self):print("Base.func2")class Foo(Base):def func2(self):print("Foo.func2")obj = Foo(123)
obj.func1() # 123 Foo.func2 func1是Base中的 func2是子类中的

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

四、类中的特殊成员

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

  1.__init__ 初始化方法

  2.__str__ 打印对象时,默认输出该方法返回值

  3.__new__ 构造方法

  4.__enter__和__exit__ with 对象 as 变量 会自动执行该方法

  5.__hash__ 打印对象哈希值

  6.__add__ 实现加法操作

  7.__mul__ 实现乘法操作

  8.__bool__ 实现真假值操作

  9.__iter__ 用于迭代器

  10.__del__ 释放内存

  11.__getitem__ 用于索引操作,如字典,获取数据

  12.__setitem__ 用于索引操作,如字典,设置数据

  13.__delitem__ 用于索引操作,如字典,删除数据

  14.__getslice__ 用于切片操作,如列表,获取数据

  15.__setslice__ 用于切片操作,如列表,设置数据

  16.__delslice__ 用于切片操作,如列表,删除数据

  17.__eq__ 判断对象的值是否相等

创建对象的真正步骤:

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

  1.加载类

  2.开辟内存(__new__)

  3.初始化(__init__)

  4.使用对象干xxxxx

转载于:https://www.cnblogs.com/minusone/p/9931950.html

Day-16 面向对象03 类与类之间的关系相关推荐

  1. JAVA面向对象-----接口与类、接口之间的关系

    接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...

  2. 内存(Display)、显示器(Monitor)和计算机(Computer)均属于一种产品(Product),其中计算机需要显示器和内存。请用Python语言简要实现这些类及它们之间的关系。

    内存(Display).显示器(Monitor)和计算机(Computer)均属于一种产品(Product),其中计算机需要显示器和内存.请用Python语言简要实现这些类及它们之间的关系. clas ...

  3. UML类图中类之间的关系,聚合,组合,依赖总结

    下面我就根据下面这个图来讲解一下UML类图. 类图 首先,看动物那个矩形框,他就表示为一个类(Class).类图分为三层: 第一层显示类的名称 如果是抽象类,就用斜体表示 第二层显示类的特性,通常是字 ...

  4. 面向对象:类与对象之间的关系

    什么是类? 类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象.在面向对象的程序设计语言中,类是对一类"事物"的属性与行为的抽象. 什么是对 ...

  5. Java中基本数据类型和Object之间的关系

    1.基本数据类型和Object之间是没有关系的 2.基本数据类型的包装类 例如int 的包装类Integer的父类则是Object 输入:12 解释:在赋值的过程中进行自动装箱

  6. 【面向对象】面向对象程序设计测试题8-对象之间one-to-many关系测试题

    Test8:对象之间one-to-many关系测试题 问题 1 A collection typically models a _____ relationship. A. many-to-many ...

  7. Java中的类与对象之间的关系

    目录 1 面向对象思想 2 类和对象 1 类 2 对象 3 类与对象的关系 3 类的定义 4 对象的使用 5 成员变量的默认值 1 面向对象思想 对象泛指现实中的一切事物,每种事物都具备自己的属性和行 ...

  8. python基础------类与对象之间的关系,封装、继承、多态

    类与对象.封装.继承 练习1 # 1.写一个员工类BwEmployee class BwEmployee(object): # (2)添加构造方法,包含5个形参,保存外部传入值,分别给以下实例属性赋值 ...

  9. python类与类的关系_python 类与类之间的关系

    一.依赖关系(紧密程度最低) (1)简单的定义:就是方法中传递一个对象.此时类与类之间存在依赖关系,此关系比较低. (2)实例植物大战僵尸简易版 题目要求:创建一个植物,创建一个僵尸 1.植物:名字. ...

  10. 浅谈UML类图中类之间的5种关系

    什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...

最新文章

  1. jwt只能用ajax么,使用JWT进行登录认证的一些问题
  2. 聚类评价兰德系数讲明白的
  3. 【PWA学习与实践】(3) 让你的WebApp离线可用
  4. 基于MATLAB的RGB转YCBCR色彩空间转换
  5. mysql获取表_MySQL获取表格信息
  6. 自动化办公之excel教程(1):工作薄,工作表,单元格基本操作
  7. 树组件:主要配置项、属性、方法
  8. 【招聘】搜狗输入法-自然语言处理研究员
  9. AngularJS中的DOM value与view value
  10. qt mdi 子窗口关闭再打开_QT 信号的使用方法
  11. 六个步骤 教你搭建Ubuntu nfs服务器
  12. 如何利用ECRS原则进行线平衡改善?
  13. Delta对冲:模拟实验
  14. 盘一盘 Python 特别篇 18 - 时区|夏令时
  15. 雷神simplest_ffmpeg_player解析(三)
  16. 如何查看mysql的gtid_mode_配置MHA开启主从同步的时候会提示从库gtid_mode为ON的状态...
  17. itop使用TF卡烧写uboot
  18. 最简单三级管振荡分析(自由多谐振荡器电路)
  19. 2020北航计算机夏令营机试题目讲解
  20. 从数组的响应式看下一代响应式数据

热门文章

  1. 正式压力测试:locust进阶,超简单搭建生产级locust集群
  2. 2022-2028年中国HDPE膜行业市场研究及投资发展分析报告
  3. php rabbmq教程_RabbitMQ+PHP 教程一(Hello World)
  4. Redis 笔记(09)— 过期时间 expire(设置、查询、取消过期时间)
  5. HTTP服务器端常用推送技术
  6. LeetCode简单题之两数之和 IV - 输入 BST
  7. SpringBoot配置文件YAML配置注入(详解)
  8. LCD: 2D-3D匹配算法
  9. 2021年大数据基础(五):​​​​​​​​​​​​​​​​​​​​​分布式技术
  10. mysql 分号 存储过程_MySql 存储过程