day22

从空间角度研究类

何处添加对象属性
  • 在类的______init______可以添加
  1. class Human:
  2. mind = "有思想的"
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. def eat(self,argv):
  7. print("吃饭")
  8. sun = Human("孙宇", 18)
  9. print(sun.__dict__)
  • 在类的方法中也可以添加
  1. class Human:
  2. mind = "有思想的"
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. def eat(self):
  7. self.habby = "女"
  8. print("吃饭")
  9. sun = Human("孙宇", 18)
  10. sun.eat()
  11. print(sun.__dict__)
  • 在类的外部也可以添加
  1. class Human:
  2. mind = "有思想的"
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. def eat(self, argv):
  7. print("吃饭")
  8. sun = Human("孙宇", 18)
  9. sun.sex = "男"
  10. print(sun.__dict__)
何处添加类的属性
  • 类的内部
  1. class Human:
  2. mind = "有思想的"
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. def eat(self, argv):
  7. Human.body = argv
  8. print("吃饭")
  9. sun.eat("大脸")
  10. print(Human.__dict__)
  • 类的外部
  1. class Human:
  2. mind = "有思想的"
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. def eat(self, argv):
  7. print("吃饭")
  8. Human.lunguage = "中文"
  9. print(Human.__dict__)
对象空间与类空间的关系

对象空间与类空间有相同的名字,对象肯定先从对象空间查找

查找顺序:

对象. 名字:对象空间 类对象指针 ---> 类空间 ---> 父类空间

类名. 名字:类空间 ---> 父类空间

  1. class Human:
  2. mind = "有思想的"
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. def eat(self, argv):
  7. print("吃饭")
  8. sun.mind = "无脑"
  9. print(sun.mind) # 无脑
  10. print(Human.mind) # 有思想的

类与类之间的关系

依赖关系:主从之分

将一个类的类名或者对象传入另一个类的方法

  1. class Elephant:
  2. def __init__(self, name):
  3. self.name = name
  4. def open(self, obj):
  5. print(f"{self.name} 默念三声:3,2,1 开门")
  6. obj.be_open()
  7. def close(self, obj):
  8. print(f"{self.name} 默念三声“3,2,1 关门")
  9. obj.be_close()
  10. class Refrigerator:
  11. def __init__(self, name):
  12. self.name = name
  13. def be_open(self):
  14. print(f"{self.name} 冰箱 被打开了")
  15. def be_close(self):
  16. print(f"{self.name} 冰箱 被关闭了")
  17. qiqi = Elephant("qiqi")
  18. haier = Refrigerator("haier")
  19. qiqi.open(haier) # 主.方法(从)
  20. qiqi.close(haier)
  21. # qiqi 默念三声:3,2,1 开门
  22. # haier 冰箱 被打开了
  23. # qiqi 默念三声“3,2,1 关门
  24. # haier 冰箱 被关闭了
关联关系

与组合相似

  1. class Boy:
  2. def __init__(self, name, girlfriend=None):
  3. self.name = name
  4. self.girlfriend = girlfriend
  5. def have_a_diner(self):
  6. if self.girlfriend:
  7. print(f"{self.name}请他的{self.girlfriend.age}岁的,{self.girlfriend.body}女朋友{self.girlfriend.name}一起吃烛光晚餐")
  8. else:
  9. print("吃啥吃")
  10. class Girl:
  11. def __init__(self, name, age, body):
  12. self.name = name
  13. self.age = age
  14. self.body = body
  15. def skill(self,obj):
  16. print(f"{obj.name}的女朋友{self.name} 会用萝莉音直播")
  17. yec = Boy("叶尘")
  18. qiao = Girl("乔碧萝", 53, "小钢炮")
  19. yec.girlfriend = qiao
  20. yec.have_a_diner()
  21. yec.girlfriend.skill(yec)
  22. # qiao = Girl("乔碧萝", 53, "小钢炮")
  23. # yec = Boy("叶尘", qiao)
  24. # yec.have_a_diner()
  25. # yec.girlfriend.skill(yec)
组合关系

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

  1. class GameRole:
  2. def __init__(self, name, ad, hp):
  3. self.name = name
  4. self.ad = ad
  5. self.hp = hp
  6. class Weapon:
  7. def __init__(self, name, ad):
  8. self.name = name
  9. self.ad = ad
  10. def weapon_attack(self, p1, p2): # 依赖关系
  11. p2.hp = p2.hp - self.ad
  12. print(f"{p1.name}利用{self.name}给了{p2.name}一下子,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")
  13. gailun = GameRole("盖伦", 15, 800)
  14. xin = GameRole("赵信", 20, 500)
  15. sword = Weapon("大宝剑", 20)
  16. # 盖伦利用大宝剑给赵信一下子
  17. sword.weapon_attack(gailun, xin)
  18. # 1、功能虽然实现了,但是逻辑上不合理,应该是人物对象调用方法.主体
  19. # 2、游戏人物本身就应该绑定武器属性
  20. class GameRole:
  21. def __init__(self, name, ad, hp):
  22. self.name = name
  23. self.ad = ad
  24. self.hp = hp
  25. def weapon_swe(self, obj):
  26. self.weapon = obj # 组合关系
  27. class Weapon:
  28. def __init__(self, name, ad):
  29. self.name = name
  30. self.ad = ad
  31. def weapon_attack(self, p1, p2): # 依赖关系
  32. p2.hp = p2.hp - self.ad # self永远默认接收本类实例化对象或者子类对象
  33. print(f"{p1.name}利用{self.name}给了{p2.name}一下子,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")
  34. gailun = GameRole("盖伦", 15, 800)
  35. xin = GameRole("赵信", 20, 500)
  36. sword = Weapon("大宝剑", 20)
  37. # 给游戏人物封装武器属性
  38. gailun.weapon_swe(sword)
  39. gailun.weapon.weapon_attack(gailun, xin)

day22——从空间角度研究类、类与类之间的关系的更多相关文章

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

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

  2. 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系

    (1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器能够自己定义不同的状态栏例如以下: -(BOOL)prefersStatusBa ...

  3. Java学习8——类(对象)之间的关系

    (基础语法结束,开始看面向对象) 关联 关联体现的是两个类之间语义级别的一种依赖关系,比如我和我的老师. 继承(一般和特殊) 继承是指一个类继承另外一个类的的功能,并可以增加新的功能,"XX ...

  4. 百万年薪python之路 -- 面向对象之:类空间问题以及类之间的关系

    面向对象之:类空间问题以及类之间的关系 1.从空间角度研究类 1.何处添加对象属性 class A: def __init__(self,name): self.name = name def fun ...

  5. PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)

    前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...

  6. 深入研究java.lang.ThreadLocal类 (转)

    深入研究java.lang.ThreadLocal类     一.概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thr ...

  7. 深入研究java.lang.ThreadLocal类(转)

    引用:http://lavasoft.blog.51cto.com/62575/51926/ 一.概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并 ...

  8. 深入研究java.lang.ThreadLocal类

        一.概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许 ...

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

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

随机推荐

  1. 用正确的姿势使用 celery

    简介 celery 是一个简单.灵活.可靠的分布式系统,可以处理大量的消息. celery 是一个任务队列,关注实时处理,同时支持任务调度. 它的工作机制是这样的: 快速使用 安装:pip3 inst ...

  2. k8s实现灰度发布

    灰度发布在实际生产部署中是经常被使用的方式,常规的方法是手动从前端LB(负载均衡)上将后端服务器摘掉,然后,停服务,最后上传代码,完成软连接更新.在使用CI/CD工具时,这个过程变得自动化了,我们只需 ...

  3. Java实现一个简单的事件监听器

    关于事件监听我们需要知道的一些基础知识. a)事件三要素(who when what): source -- 事件源 when -- 事件发生时间 message -- 事件主题消息,即希望通过事件传 ...

  4. PSQLException: An I/O error occurred while sending to the backend.

    postgresql批量新增数据时,批量插入的数据量太大了,造成了IO异常 只能把这么多数据先进行分割,再批量插入,但是感觉这种方式不是最优解,先暂时顶着,具体List分割方式如下: package ...

  5. https与http的区别?

    https要比http更加安全一些,也就是说http协议是由ssl+http协议构建的可进行加密传输.身份验证的网络协议要比http协议安全 现在大多数的网站都逐渐用https://,因为安全问题太重 ...

  6. ansible-playbook--jia使用

    #cat jia.yml - hosts: test-gfs user: dev gather_facts: true vars: PORT: "3306" MESAGE: &qu ...

  7. Eclipse解决项目中找不到Maven Dependencies

    项目中找不到Maven Dependencies 正常的Maven项目应该是这样的 自己的项目中却没有Maven Dependencies 先做第一步 若项目中还没有出现Maven Dependenc ...

  8. Django实现自动发布(1数据模型)

    公司成立之初,业务量较小,一个程序包揽了所有的业务逻辑,此时服务器数量少,上线简单,基本开发-测试-上线都是由开发人员完成. 随着业务量逐渐上升,功能增多,代码量增大,而单一功能上线需要重新编译整个程 ...

  9. 把ngnix注册为linux服务 将Nginx设置为linux下的服务 并设置nginx开机启动

    一.创建服务脚本 vim /etc/init.d/nginx 脚本内容如下 #! /bin/sh# chkconfig: - 85 15 PATH=/usr/local/nginx/sbin/ DES ...

  10. Delaunay和Voronoi

    什么是Delaunay三角剖分? 图1:Delaunay三角剖分偏爱小角度 给定平面中的一组点,三角剖分指的是将平面细分为三角形,这些点为顶点.在图1中,我们在左侧图像上看到了一组地标,在中间图像上看 ...