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

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类与类的关系_python类与类的关系相关推荐

  1. python中什么叫类、什么叫对象_python中的类面向对象的基本概念!

    一.概述 今天我们讲述Python中的类&面向对象的基本概念. 首先我们为什么要学习面向对象,我讲一个故事,应该就可以明白了.在古时候,官府衙门如果要颁布什么告示就会去找工匠将命令中的字都雕刻 ...

  2. python中关于命名的例子_Python()-类命名空间和对象/实例命名空间

    类命名空间和对象/实例命名空间: 创建类, 就会创建一个类的名称空间, 空间:存储类的属性 属性: 静态属性:直接定义在类下面 & 和类名关联 的变量 对象属性:在类内和self关联 & ...

  3. python中类和对象的内容_python中的类和对象

    摘要:本文主要介绍了python中的类和对象的基础内容.由于在c++中对类和对象已经有了较为深刻的认识,所以此部分就是主要熟悉一下创建方法和使用方法. 1.类.对象的创建和简单使用 主要观察创建类的方 ...

  4. python类之间方法互相调用_Python中类与类之间属性和方法的调用

    Python中类与类之间属性和方法的调用 class A(object):  #定义一个类 name='python' #类属性 def __init__(self): #实例属性 self.age= ...

  5. python创建类的两个对象_Python为一个类创建多个对象

    分步教程 要读取文件内容,请使用io.open.如果任何名称有强调字符,请不要忘记指定文件编码.在with io.open('students.txt', mode="r", en ...

  6. python中什么叫类、什么叫对象_Python中的类和对象是什么

    一.面向过程和面向对象 面向过程:根据业务逻辑从上到下写代码. 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程. 二.类和对象 1.类的概念 面向对象编 ...

  7. python在类内部使用装饰器_python – 如何在类中使用装饰器

    我知道有类似的问题,但我的情况有些不同:参考代码: class MyClass(object): def __init__(self, log_location) self.logs = loggin ...

  8. python与人工智能的关系_python和人工智能之间的关系是什么?老男孩Python人工智能...

    对于python.人工智能这两个词大家是很熟悉的,而且在生活中大家很容易混淆这两个词汇,甚至觉得python就是人工智能,那么python与人工智能有什么关系呢? 什么是python? python是 ...

  9. python中简述对象和类的关系_Python学习笔记(七)对象和类

    什么是对象 Python中所有的数据都是以对象的形式存在,无论是简单的数字类型还是复杂的代码模块.在Python中,当我们想要创建属于自己的对象或者修改已有对象的行为时,才需要关注对象的内部实现细节. ...

  10. python中简述对象和类的关系_Python笔记-习题42 对象、类及从属关系

    1.研究一下为什么Python添加了这个奇怪的叫做object的类,它究竟有什么含义呢? A:Python中一切皆对象,创建的类皆以object为基类(父类),默认继承继承基类的属性和方法 Pytho ...

最新文章

  1. 从设计到实现,一步步教你实现Android-Universal-ImageLoader-辅助类
  2. POJ-2513 Colored Sticks 字典树,欧拉回路
  3. 14个顶级开发社区 [程序员]
  4. redis安装及错误排查
  5. 《大型网站技术架构:核心原理及案例分析》阅读笔记01
  6. 数据库-mysql基础操作之输入查询
  7. 《剑指offer》和为s的两个数字
  8. 新手向:如何理解OpenGL中着色器,渲染管线,光栅化等概念
  9. Bootstrap-组件-3
  10. 三中好用的数组去重方式
  11. 懒惰的人有福了——VS代码段编辑器SnippetEditor 可对vs所有代码段进行编辑和创建包括C#\J#\VB.NET等...
  12. 七夕表白小代码喜欢的拿去
  13. 从 Netflix 到 Alibaba,Spring Cloud 更好了吗?
  14. 软考高级系统架构设计师:论文万能模版
  15. 基于java物流管理信息系统
  16. excel部分网格线不见了_每天都要用到的excel技巧!建议大家收藏!
  17. 《Spring Boot极简教程》附录2 编程的本质
  18. Unity 网络请求
  19. python邮件管理
  20. 企业为什么需要B2B电商系统

热门文章

  1. 解决[WARNING]: sftp transfer mechanism failed on [xx]. Use ANSIBLE_DEBUG=1 to see detailed information
  2. RFC3920 xmpp协议
  3. 谈Java语言规范之枚举类型
  4. skylake服务器CPU型号芯片,Skylake与Kaby Lake顶级处理器到底有多大差别?Intel i7-7700K评测...
  5. 【基础算法】最大公约数(Acwing872题)(辗转相除法)
  6. UE4笔记_Paper 2D Flipbooks
  7. Jmockit使用指南
  8. BUU LFI COURSE 1 WP
  9. Levenberg-Marquardt
  10. 卫片图斑_推进土地卫片图斑整治工作