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

class Elphant:
def __init__(self, name):
self.name = name
def open(self, ref):
print("⼤象要开门了. 默念三声. 开!")
# 由外界传递进来一个冰箱, 让冰箱开门. 这时.象不用背着冰箱到处跑.
# 类与类之间的关系也就不那么的紧密了. 换句话说. 只要是有open_door()方法的对象. 都可以接收运行
ref.open_door()
def close(self, ref):
print("⼤象要关门了. 默念三声. 关!")
ref.close_door()
def take(self):
print("钻进去")
class Refrigerator:
def open_door(self):
print("冰箱门被打开了")
def close_door(self):
print("冰箱门被关上了") # 造冰箱
r = Refrigerator()
# 造⼤象
el = Elphant("神奇的⼤象")
el.open(r) # 注意. 此时是把这个冰箱作为参数传递进去了. 也就是说.大象可以指定任何一个冰箱.
el.take()
el.close(r)

此时, 我们说, 大象和冰箱之间就是依赖关系. 我用着你. 但是你不属于我. 这种关系是最弱的.

二.关联关系.组合关系.聚合关系  这三个在代码上写法是一样的. 但是, 从含义上是不一样的.

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

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

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

看关联关系: 这个最简单. 也是最常用的一种关系. 比如. 大家都有男女朋友. 男人关联着女朋友. 女人关联着男朋友. 这种关系可以是互相的, 也可以是单方面的.

class Boy:
def __init__(self, name, girlFriend=None):
self.name = name
self.girlFriend = girlFriend
def have_a_dinner(self):
if self.girlFriend:
print("%s 和 %s⼀起去吃晚餐" % (self.name, self.girlFriend.name))
else:
print("单身狗. 吃什么饭")
class Girl:
def __init__(self, name):
self.name = name
b = Boy("alex")
b.have_a_dinner()
# 突然牛B了. 找到女朋友了
g = Girl("如花")
b.girlFriend = g # 有女朋友了. 6666
b.have_a_dinner()
gg = Girl("李⼩花")
bb = Boy("wusir", gg) # 娃娃亲. 出生就有女朋友. 服不服
bb.have_a_dinner() # 多么幸福的一家
# 突然.bb失恋了. 娃娃亲不跟他好了
bb.girlFriend = None
bb.have_a_dinner() # 又单身了

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

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

class School:
def __init__(self, name, address):
self.name = name
self.address = address
class Teacher:
def __init__(self, name, school=None):
self.name = name
self.school = school
s1 = School("⽼男孩北京校区", "美丽的沙河")
s2 = School("⽼男孩上海校区", "迪⼠尼旁边")
s3 = School("⽼男孩深圳校区", "南⼭区法院欢迎你")
t1 = Teacher("金王", s1)
t2 = Teacher("银王", s1)
t3 = Teacher("海峰", s2)
t4 = Teacher("高鑫", s3)
# 找到高鑫所在的校区地址
print(t4.school.name)

三.继承关系

class Base:
def __init__(self, num):
self.num = num
def 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在访问方法的顺序: 永远先找自己的. 自己的找不到再找父类的.
self就是你访问方法的那个对象. 先找自己, 然后在找父类的

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

1. 加载类

2. 开辟内存(__new__)

3. 初始化(__init__)

4. 使用对象干xxxxxxxxx

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

day20 Pyhton学习 面向对象-类与类之间的关系的更多相关文章

  1. day20 Pyhton学习 面向对象-成员

    一.类的成员 class 类名: # 方法 def __init__(self, 参数1, 参数2....): # 属性变量 self.属性1 = 参数1 self.属性2 = 参数2 .... # ...

  2. Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系

    Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...

  3. python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系

    https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...

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

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

  5. PHP类和对象之间的关系

    类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: - ...

  6. UML图类,接口之间的关系

    UML图类之间的关系(来自大话设计模式中的一张图,代表了类,接口之间的各种关系)

  7. 峰Spring4学习(5)bean之间的关系和bean的作用范围

    一.bean之间的关系: 1)继承: People.java实体类: package com.cy.entity; public class People { private int id; priv ...

  8. python面向对象与结构成员之间的关系

    1面向对象结构分析:----面向对象整体大致分为两块区域:-------第一部分:静态字段(静态变量)部分-------第二部分:方法部分--每个区块可以分为多个小部分 class A: countr ...

  9. linux学习笔记----权限与命令之间的关系(极重要)

    一.权限与命令之间的关系 二.文件与目录的默认权限与隐藏权限 1)umask为默认的权限(通过umask -S)查看你的系统的默认权限. umask的分数是指该默认值需要减掉的权限,比如说umask= ...

随机推荐

  1. ZT:如果有来生,要做一棵树

    出处:https://zhidao.baidu.com/question/393644025.html 原以为是三毛所作,想不到还有争议. 如果有来生,要做一棵树, 站成永恒.没有悲欢的姿势, 一半在 ...

  2. linux 用户、用户组的操作

    1.查看linux系统下的所有用户 方式一:grep bash /etc/passwd 方式二:查看etc/passwd文件,其他第三个参数大于500的都是用户自己新增的 vim /etc/passw ...

  3. spring5源码 -- IOC容器设计理念和核心注解的作用

    一. spring源码整体脉络介绍及源码编译 二. Spring IOC的源码深入学习 2.1 ioc容器的加载过程(重要) 2.2 bean的生命周期源码深度剖析 2.3 循环依赖总结讲解 2.4 ...

  4. sql注入--bool盲注,时间盲注

    盲注定义: 有时目标存在注入,但在页面上没有任何回显,此时,我们需要利用一些方法进行判断或者尝试得到数据,这个过程称之为盲注. 布尔盲注: 布尔盲注只有true跟false,也就是说它根据你的注入信息 ...

  5. 抓取 USB 总线LOG

    在实际工作中经常会遇到需要分析USB报文的情形.比如对比不同厂家4G/5G模块.解决实际IP over USB传输效率低下问题. 这时候如果能抓取到 USBMOM 总线的报文将会大有裨益.毕竟所有ho ...

  6. Docker实战(6): 导出docker镜像离线包

    前言 离线环境安装Docker 镜像,我已知两种情况,以下操作我将采用在可访问外网的机器上通过镜像迁移的方式来给离线环境安装. 环境:服务器node1可访问外网.服务器node2无法访问外网 两台机器 ...

  7. c语言之结构

    定义结构: struct point { int x; int y; }; 定义结构并声明变量: struct point { int x; int y; }pt1,pt2,pt3; 声明结构变量 s ...

  8. 刷题[安恒DASCTF2020四月春季赛]Ez unserialize

    解题思路 打开直接源码,没别的,审就完事了 代码审计 <?php show_source("index.php"); function write($data) { retu ...

  9. 安装Angular CLI开发工具

    目前,无论你使用什么前端框架,都必然要用到NodeJS工具,Angular也不例外,与其他框架不同的是,Angular一开始就使用"全家桶"式的设计思路,因此@angular/cl ...

  10. Spark中的聚类算法

    Spark - Clustering 官方文档:https://spark.apache.org/docs/2.2.0/ml-clustering.html 这部分介绍MLlib中的聚类算法: 目录: ...