类与类之间的关系(依赖关系,大象与冰箱是依赖关系)

class DaXiang:
def open(self, bx): # 这里是依赖关系. 想执行这个动作. 必须传递一个bx
print("大象高高兴兴走到了冰箱的面向前")
bx.kai() # 传递来的对象执行kai()动作
print("大象成功的打开了冰箱门") def zhuang(self):
print("自己走进了冰箱") def close(self, bx):
print("大象要关冰箱门了")
bx.guan() class BingXiang:
def kai(self):
print("我是冰箱. 我会开门 ")
def guan(self):
print("我是冰箱. 我会关门 ")
bx1 = BingXiang()
bx2 = BingXiang()
dx = DaXiang() dx.open(dfg)
dx.zhuang()
dx.close(dfg)

例二 植物大战僵尸

# 植物大战僵尸. 创建一个植物. 创建一个僵尸
# 植物: 名字, 攻击力
# 僵尸: 名字, 血量
# 植物可以打僵尸. 僵尸掉血
# 显示出僵尸挨揍之后的血量
class ZhiWu:
def __init__(self, name, attack, hp):
self.name = name
self.attack = attack
self.hp = hp def fight(self, js):
js.hp -= self.attack class JiangShi:
def __init__(self, name, hp, attack):
self.name = name
self.hp = hp
self.attack = attack def chi(self, zhiwu):
zhiwu.hp -= self.attack lvluo = ZhiWu("绿萝", 20, 10)
js1 = JiangShi("僵尸一号", 100, 5)
lvluo.fight(js1)
lvluo.fight(js1)
lvluo.fight(js1) js1.chi(lvluo)
js1.chi(lvluo)
js1.chi(lvluo)
print(lvluo.hp)
print(js1.hp)

⼆. 关联关系.组合关系, 聚合关系
其实这三个在代码上写法是⼀样的. 但是, 从含义上是不⼀样的.
1. 关联关系. 两种事物必须是互相关联的. 但是在某些特殊情况下是可以更改和更换的.
2. 聚合关系. 属于关联关系中的⼀种特例. 侧重点是xxx和xxx聚合成xxx. 各⾃有各⾃的
声明周期. 比如电脑. 电脑⾥有CPU, 硬盘, 内存等等. 电脑挂了. CPU还是好的. 还是
完整的个体
3. 组合关系. 属于关联关系中的⼀种特例. 写法上差不多. 组合关系比聚合还要紧密. 比
如⼈的⼤脑, ⼼脏, 各个器官. 这些器官组合成⼀个⼈. 这时. ⼈如果挂了. 其他的东⻄
也跟着挂了

关联关系
简单来说就是一对一的关系
例子一
class Boy:
def __init__(self, name, girlFriend = None):
self.name = name
self.girlFriend = girlFriend # 关联关系
def chi(self): # b
if self.girlFriend:
self.girlFriend.happy()
print("%s和%s在吃饭" % (self.name, self.girlFriend.name))
else:
print("没女朋友吃什么吃") class Girl:
def __init__(self, name):
self.name = name def happy(self):
print("有好吃的就开心") b = Boy("王明")
g = Girl("肉丝")
# b对象的girlFriend赋值 g b.girlFriend = g # 突然天降女朋友
b.chi()
b.girlFriend = None
b.chi()例
例二老师和学生的关系. 一对多的关系 反过来就是一对一
class Teacher:
def __init__(self, name, lst=None):
self.name = name
if lst == None: # 判断传递过来的参数是否是空
self.lst = []
else: # 传递过来的是一个列表
self.lst = lst # 添加学生
def tianjia(self, student):
self.lst.append(student) def display(self):
for s in self.lst: # s 是老师的学生
print(s.name) class Student:
def __init__(self, num, name, teacher=None):
self.name = name
self.num = num
self.teacher = teacher
t = Teacher("大张伟")
s1 = Student(1, "郭德纲")
s2 = Student(2, "岳云鹏")
s3 = Student(3, "张鹤伦")
s4 = Student(4, "朱云峰") t.tianjia(s1) # 把学生添加给老师
t.tianjia(s2)
t.tianjia(s4)
# 帖子和评论
class Tie:
def __init__(self, title, content, author, time, pinglun_lst = None):
self.title = title
self.content = content
self.author = author
self.time = time
if pinglun_lst == None:
self.pinglun_lst = []
else:
self.pinglun_lst = pinglun_lst class Pinglun:
def __init__(self, name, time, content, fav):
self.name = name
self.time = time
self.content = content
self.fav = fav pl1 = Pinglun("UZI", "昨天1", "UZI发出祝福",1888888)
pl2 = Pinglun("xiaohu", "昨天2", "UZI发出祝福",1888888)
pl3 = Pinglun("若风", "昨天3", "UZI发出祝福",1888888)
pl4 = Pinglun("let me", "昨天3", "UZI发出祝福",1888888)
pl5 = Pinglun("长长", "昨天4", "UZI发出祝福",1888888)
pl6 = Pinglun("jackylove", "昨天5", "UZI发出祝福",1888888)
pl7 = Pinglun("mlxg", "昨天6", "UZI发出祝福",1888888)
pl8 = Pinglun("miss", "昨天7", "UZI发出祝福",1888888) lst = []
lst.append(pl1)
lst.append(pl2)
lst.append(pl3)
lst.append(pl4)
lst.append(pl5)
lst.append(pl6)
lst.append(pl7)
lst.append(pl8) # 显示帖子的内容. 评论的内容
tie = Tie("S8_IG夺冠. 王思聪怒吃热狗. ", "IG的上单The Shy疯了一样. 一个打5个. 自己人都不放过", "王明","某年某月某一天",lst )
print(tie.content) # 评论
# print(tie.pinglun_lst)
for pl in tie.pinglun_lst:
print(pl.content)
继承关系,指的是子类继承父类除私有属性外所有的属性.
class Base:
def __init__(self, num):
self.num = num def func1(self):
print(self.num)
self.func2() def func2(self):
print(111, self.num) class Foo(Base):
def func2(self):
print(222, self.num) lst = [Base(1), Base(2), Foo(3)]
for obj in lst:
obj.func2()
四. 类中的特殊成员
什么是特殊成员呢? __init_()就是⼀个特殊的成员. 说⽩了. 带双下划线的那⼀坨. 这些⽅
法在特殊的场景的时候会被⾃动的执⾏. 比如,
1. 类名() 会⾃动执⾏__init__()
2. 对象() 会⾃动执⾏__call__()
3. 对象[key] 会⾃动执⾏__getitem__()
4. 对象[key] = value 会⾃动执⾏__setitem__()
5. del 对象[key] 会⾃动执⾏ __delitem__()
6. 对象+对象 会⾃动执⾏ __add__()
7. with 对象 as 变量 会⾃动执⾏__enter__ 和__exit__
8. 打印对象的时候 会⾃动执⾏ __str__
9. ⼲掉可哈希 __hash__ == None 对象就不可哈希了.
创建对象的真正步骤:
⾸先, 在执⾏类名()的时候. 系统会⾃动先执⾏__new__()来开辟内存. 此时新开辟出来的内
存区域是空的. 紧随其后, 系统⾃动调⽤__init__()来完成对象的初始化⼯作. 按照时间轴来算.
1. 加载类
2. 开辟内存(__new__)
3. 初始化(__init__)
4. 使⽤对象⼲xxxxxxxxx 类似的操作还有很多很多. 我们不需要完全刻意的去把所有的特殊成员全都记住. 实战中也
⽤不到那么多. ⽤到了查就是了.

  

  

 

  

 

  

python类与类的关系的更多相关文章

  1. Python设计模式 - 基础 - 类/接口之间的六种关系

    在程序中需要把世间万物抽象成相应的类,现实世界中物与物之间的关系和程序中类与类之间的关系相对应,因为世间万物是普遍联系的,所以程序中类与类之间也不是孤立的.在系统分析和框架设计中,根据面向对象机制的三 ...

  2. python学习 day017打卡 类与类之间的关系

    本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员 一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖 ...

  3. python 面向对象类与类之间的关系

    主要内容: 1. 依赖关系 2. 关联关系, 组合关系, 聚合关系 3. 继承关系 4. 类中的特殊成员 引子 大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类. 那 ...

  4. 小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系)

    小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系 1. 依赖关系. 最轻的一种关系 在方法中引入另一个类的对象 class Elephant: def __init__(sel ...

  5. Python进阶(十四)----空间角度研究类,类与类之间的关系

    Python进阶(十四)----空间角度研究类,类与类之间的关系 一丶从空间角度研究类 对象操作对象属性 class A(): address = '沙河' def __init__(self, na ...

  6. Python 入门 之 类的三大关系(依赖 / 组合/ 继承关系)

    Python 入门 之 类的三大关系(依赖 / 组合/ 继承关系) 在面向对象的中,类与类之间存在三种关系:依赖关系.组合关系.继承关系. 1.依赖关系:将一个类的类名或对象当做参数传递给另一个函数被 ...

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

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

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

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

  9. python 类与类之间的关系

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

  10. python之路--类与类之间的关系

    类和类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻 ...

随机推荐

  1. Linux下MySQL远程链接配置

    配置步骤: 1).首先进入数据库,使用系统数据库mysql mysql -u root -p mysql 2).接着对系统数据库的root账户设置远程访问的密码,与本地的root访问密码并不冲突 gr ...

  2. (2018干货系列十一)最新iOS学习路线整合

    怎么学iOS iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础 ...

  3. JavaUtil 处理Base64的图片上传

    UploadImageBase64.java package com.lee.util; import java.io.File; import java.io.FileOutputStream; i ...

  4. 爬虫学习06用selenium爬取空间

    用selenium爬取空间 from selenium import webdriver from lxml import etree import time pro = webdriver.Chro ...

  5. 如何解决win10关机状态下,按键盘会自动开机的问题

    关机状态下按下键盘会自动开机,是因为所装的系统默认设置了快速启动功能 下面是关闭快速启动的方法: 步骤一: 在win10桌面右击,点击显示设置 步骤二: 电源和睡眠-->其他电源设置 步骤三: ...

  6. powermockito 常用操作

    1:Mock带参数的静态方法 PowerMockito类 package org.powermock.api.mockito; CityCodeBean cityCodeBean = CityCode ...

  7. you must restart adb and eclipse的相关解决办法

    问题是5037端口被占用: C:\>netstat -aon|findstr "5037" 看到了吗,端口被进程号为5037的进程占用,继续执行下面命令(也可以去任务管理器中 ...

  8. cJSON库的简单介绍及使用

    转载:http://www.cnblogs.com/liunianshiwei/p/6087596.html JSON 语法是 JavaScript 对象表示法语法的子集.数据在键/值对中:数据由逗号 ...

  9. topcoder srm 305 div1

    problem1 link 直接按照题意模拟即可. import java.util.*; import java.math.*; import static java.lang.Math.*; pu ...

  10. 更新32位Spyder从3.0.0-> 3.2.3

    https://stackoverflow.com/questions/51222550/how-to-update-spyder-3-3-0 It works!! 1. went to the An ...