day20 Pyhton学习 面向对象-类与类之间的关系
一.类与类之间的依赖关系
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学习 面向对象-类与类之间的关系的更多相关文章
- day20 Pyhton学习 面向对象-成员
一.类的成员 class 类名: # 方法 def __init__(self, 参数1, 参数2....): # 属性变量 self.属性1 = 参数1 self.属性2 = 参数2 .... # ...
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
- python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系
https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...
- JAVA面向对象-----接口与类、接口之间的关系
接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...
- PHP类和对象之间的关系
类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: - ...
- UML图类,接口之间的关系
UML图类之间的关系(来自大话设计模式中的一张图,代表了类,接口之间的各种关系)
- 峰Spring4学习(5)bean之间的关系和bean的作用范围
一.bean之间的关系: 1)继承: People.java实体类: package com.cy.entity; public class People { private int id; priv ...
- python面向对象与结构成员之间的关系
1面向对象结构分析:----面向对象整体大致分为两块区域:-------第一部分:静态字段(静态变量)部分-------第二部分:方法部分--每个区块可以分为多个小部分 class A: countr ...
- linux学习笔记----权限与命令之间的关系(极重要)
一.权限与命令之间的关系 二.文件与目录的默认权限与隐藏权限 1)umask为默认的权限(通过umask -S)查看你的系统的默认权限. umask的分数是指该默认值需要减掉的权限,比如说umask= ...
随机推荐
- 转载:Redis主从复制与高可用方案
转载自: https://www.cnblogs.com/lizhaojun-ops/p/9447016.html 原文链接:http://gudaoyufu.com/?p=1230 redis主从复 ...
- ThinkPHP6.0 多应用模式 部署 Layuiadmin 单页版
TP6.0中的路由省略应用名只能用入口文件绑定应用 和 域名绑定应用,经过测试,最后得出域名绑定应用是最合适的部署方式.如果有更好的部署方案,欢迎分享.QQ:23426945 1. 下载TP6.0,引 ...
- oracle中创建用户,指定要查询的视图 --九五小庞
--01: 创建PACS用户,并且初始密码为PACScreate user PACS identified by "PACS"; --02: 赋予该用户登录数据库的权限.grant ...
- WinDbg排查CPU高的问题
一.概述 在Window服务器部署程序后,可能因为代码的不合理或者其他各种各样的问题,会导致CPU暴增,甚至达到100%等情况,严重危及到服务器的稳定以及系统稳定,但是一般来说对于已发布的程序,没法即 ...
- python基本数据类型和循环、判断
一.语言分为2种: 编译型语言:写完代码不能执行,得先编译 c.c++.c#,速度相对解释性语言更快,因为只需要执行一次解释型语言:不需要编译,直接执行 python.java.php.js.go.r ...
- 按正常步骤对github的仓库进行push自己本地的代码提示push rejected
按正常步骤对github的仓库进行push自己本地的代码提示push rejected. 大概原因是:初始化项目时,远程仓库我建了README.md文件,而本地仓库与远程仓库尚未进行文件关联,因此需要 ...
- 被喷了!聊聊我开源的RPC框架那些事
前段时间利用业余时间写了一个简单的 RPC 框架,花费了不少精力.开源出来之后,少部分不太友好的技术人站在上帝视角说了风凉话.就很难受,兄弟,谁还没有一个玻璃心. 简单吐槽一波,给大家聊聊关于 gui ...
- bash运行脚本的几种方式
转载自https://www.jianshu.com/p/ba6efda13e23 转载地址:http://www.jquerycn.cn/a_8354 bash shell 脚本执行的方法有多种,本 ...
- spring mvc(5) HandlerAdapter
前面我们讲到了通过HandlerMapping可以获得不同类型的处理器,可以是Controller.HttpRequestHandler.Servlet.HandlerMethod甚至是我们自定义的处 ...
- jenkins在windows系统及linux环境安装
一.下载 jenkins是当前持续集成(Continuous integration,简称 CI)的主流工具,在项目中得到了广泛的推广和应用. 下载地址: https://jenkins.io/dow ...