2.2 关联,聚合,组合关系

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

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_diner(self):

if self.girlFriend:

print('%s 和 %s 一起晚饭'%(self.name,self.girlFriend.name))

else:

print('单身狗,吃什么饭')

class Girl:

def __init__(self,name):

self.name = nameb = Boy('日天')

b.have_a_diner() # 此时是单身狗

# 突然有一天,日天牛逼了

b.girlFriend = '如花'

b.have_a_diner() #共进晚餐# wusir 生下来就有女朋友 服不服

gg = Girl('小花')

bb = Boy('wusir', gg)

bb.have_a_diner()

# 结果嫌他有点娘,不硬,分了

bb.girlFriend = None

bb.have_a_diner()

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

class School:

def __init__(self,name,address):

self.name = name

self.address = address

class Teacher:

def __init__(self,name,school):

self.name = name

self.school = school

s1 = School('北京校区','美丽的沙河')

s2 = School('上海校区','上海迪士尼旁边')

s3 = School('深圳校区','南山区')

t1 = Teacher('武大',s1)

t2 = Teacher('海峰',s2)

t3 = Teacher('日天',s3)

print(t1.school.name)

print(t2.school.name)

print(t3.school.name)

但是学校也是依赖于老师的,所以老师学校应该互相依赖。class School:

def __init__(self,name,address):

self.name = name

self.address = address

self.teacher_list = []

def append_teacher(self,teacher):

self.teacher_list.append(teacher)

class Teacher:

def __init__(self,name,school):

self.name = name

self.school = school

s1 = School('北京校区','美丽的沙河')

s2 = School('上海校区','上海迪士尼旁边')

s3 = School('深圳校区','南山区')

t1 = Teacher('武大',s1)

t2 = Teacher('海峰',s2)

t3 = Teacher('日天',s3)

s1.append_teacher(t1)

s1.append_teacher(t2)

s1.append_teacher(t3)

# print(s1.teacher_list)

# for teacher in s1.teacher_list:

# print(teacher.name)

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

至于组合关系和聚合关系,其实代码上差别不大,咱们就以组合举例:

组合:将一个类的对象封装到另一个类的对象的属性中,就叫组合。

咱们设计一个游戏人物类,让实例化几个对象让这几个游戏人物实现互殴的效果。class Gamerole:

def __init__(self,name,ad,hp):

self.name = name

self.ad = ad

self.hp = hp

def attack(self,p1):

p1.hp -= self.ad

print('%s攻击%s,%s掉了%s血,还剩%s血'%(self.name,p1.name,p1.name,self.ad,p1.hp))

gailun = Gamerole('盖伦',10,200)

yasuo= Gamerole('亚索',50,80)

#盖伦攻击亚索

gailun.attack(yasuo)

# 亚索攻击盖伦

yasuo.attack(盖伦)

但是这样互相攻击没有意思,一般游戏类的的对战方式要借助武器,武器是一个类,武器类包含的对象很多:刀枪棍剑斧钺钩叉等等,所以咱们要写一个武器类。class Gamerole:

def __init__(self,name,ad,hp):

self.name = name

self.ad = ad

self.hp = hp

def attack(self,p1):

p1.hp -= self.ad

print('%s攻击%s,%s掉了%s血,还剩%s血'%(self.name,p1.name,p1.name,self.ad,p1.hp))

class Weapon:

def __init__(self,name,ad):

self.name = name

self.ad = ad

def weapon_attack(self,p1,p2):

p2.hp = p2.hp - self.ad - p1.ad

print('%s 利用 %s 攻击了%s,%s还剩%s血' %(p1.name,self.name,p2.name,p2.name,p2.hp))

接下来借助武器攻击对方:pillow = Weapon('绣花枕头',2)

pillow.weapon_attack(barry,panky)

# 但是上面这么做不好,利用武器攻击也是人类是动作的发起者,所以不能是pillow武器对象,而是人类利用武器攻击对方

所以,对代码进行修改。

class Gamerole:

def __init__(self,name,ad,hp):

self.name = name

self.ad = ad

self.hp = hp

def attack(self,p1):

p1.hp -= self.ad

print('%s攻击%s,%s掉了%s血,还剩%s血'%(self.name,p1.name,p1.name,self.ad,p1.hp))

def equip_weapon(self,wea):

self.wea = wea # 组合:给一个对象封装一个属性改属性是另一个类的对象

class Weapon:

def __init__(self,name,ad):

self.name = name

self.ad = ad

def weapon_attack(self,p1,p2):

p2.hp = p2.hp - self.ad - p1.ad

print('%s 利用 %s 攻击了%s,%s还剩%s血'

%(p1.name,self.name,p2.name,p2.name,p2.hp))

# 实例化三个人物对象:

barry = Gamerole('太白',10,200)

panky = Gamerole('金莲',20,50)

pillow = Weapon('绣花枕头',2)

# 给人物装备武器对象。

barry.equip_weapon(pillow)

# 开始攻击

barry.wea.weapon_attack(barry,panky)

python中对象和类的关系_Python面向对象之类与类之间的关系相关推荐

  1. python中对象的概念是什么_python面向对象编程的基本概念

    作者|HIMANSHI SINGH 编译|VK 来源|Analytics Vidhya 介绍 在学习面向对象编程时,我决定深入研究它的历史,结果发现它很迷人.术语"面向对象编程"( ...

  2. python中对类变量的访问形式_Python 面向对象中类、方法、变量、实例化和对象的概念,python定义类和访问权限?python三大支柱封装、继承和多态-立地货...

    Python 面向对象搞懂Python类.方法.变量.实例化和对象的概念 面向对象技术简介 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.面 ...

  3. python元类单例_python面向对象和元类的理解

    1 python类对象与实例对象 python中一切皆对象(广义上的对象),类也不例外,我们可以称类为类对象.python中内建函数type()可以返回对象的类型,例如type(int)会得到返回值, ...

  4. python中对象包含几个部分_python中包含对象类型的两个列表的交集

    如果顺序无关紧要,请使用set.intersection:A = [(1.1,2.2),(3.3,4.4),(5.5,6.6)] B = [(1.1,2.2),(7.7,8.8),(3.3,4.4)] ...

  5. python中对象的定义_python中对象的定义和使用

    python中对象的定义和使用 发布时间:2020-06-22 11:57:16 来源:亿速云 阅读:98 作者:Leah 今天就跟大家聊聊有关python中对象的定义和使用,可能很多人都不太了解,为 ...

  6. python中变量的定义、命名_python中变量的定义、命名

    变量 1.什么是变量? 变量名只有在第一次出现才是定义变量(变量名再次出现,不是定义变量,而是直接使用之前定义的变量) 2.变量的定义 在 python 中,每个变量在使用前都必须赋值,变量赋值以后该 ...

  7. IT项目管理中projects、programs和portfolio之间的关系,附带operations以及OPM之间的关系分析

    Projects.programs.portfolio.operations以及OPM概念 projects(项目):项目是一个特殊的.将被完 成的有限任务,它是在一定时间内,满足一系列特定目标的 多 ...

  8. python中组合与继承的区别_python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...

  9. python中对象的特性_python中类与对象之继承,python类和对象理解,面对对象的三大特性之...

    python中类与对象之继承,python类和对象理解,面对对象的三大特性之 面对对象的三大特性之继承 1.什么是继承? 在程序中,继承指的是class与class之间的关系 继承是一种关系,必须存在 ...

最新文章

  1. Mysql进阶(1)——异步复制(主从复制、Gtid复制)、半同步复制
  2. NYOJ 801 Haffman编码
  3. cordova指定版本_Cordova 基本命令 以及如何添加,删除插件
  4. android客户端注入及清除cookie,Android客户端注入及清除Cookie
  5. 牛客网【每日一题】3月26日 合并回文子串
  6. JavaScript(JS)的习惯写法总结
  7. ajax概述原理,ajax基本原理
  8. 这些Python代码技巧,你肯定还不知道
  9. linux 相关系统参数调优(特别针对网络传输,大量TIME_WAIT 的TCP状态的情况)
  10. oracle ogg 12c mysql_Oracle GoldenGate 下载
  11. Hbase高级功能过滤(Filter)
  12. windows 下 LITE IDE go lang 安装配置使用
  13. python爬虫下一页_Python爬虫怎么获取下一页的URL和网页内容?
  14. dns解析服务器原理,简述DNS服务器原理
  15. 实用的图片批量压缩优化工具
  16. 学习《医学三字经白话解》之咳嗽+疟疾+痢证
  17. 使用jupyter环境在数据集处理中遇到.ipynb_checkpoints no such file or directory的问题
  18. 灾难性的洪水帮助塑造了火星上的独特景观
  19. 谈谈基于模型的设计(Model-Based Design)
  20. tp5.1 系统常量

热门文章

  1. python初学者怎么入门-初学者如何学习Python?掌握这17个实用小技巧快速入门!...
  2. 0基础学python要多久-零基础学习Python开发需要多长时间?
  3. python必备基础代码-python基础知识和练习代码
  4. arcgis python 教程-按区域消除--arcgis python实例教程
  5. 简单python脚本实例-30个Python 小例子,帮你快速上手Python
  6. python基础教程廖雪峰云-为什么看不懂廖雪峰的Python学习教程?
  7. python入门经典100例-【python】编程语言入门经典100例--14
  8. python自动化办公都能做什么-用python进行办公自动化都需要学习什么知识呢?
  9. 从0开始搭建产品经理AI知识框架:语音识别与合成
  10. 什么是语音技术及其应用?语音识别的研究意义与进展