day22——从空间角度研究类、类与类之间的关系
day22
从空间角度研究类
何处添加对象属性
- 在类的______init______可以添加
class Human:
mind = "有思想的"
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self,argv):
print("吃饭")
sun = Human("孙宇", 18)
print(sun.__dict__)
- 在类的方法中也可以添加
class Human:
mind = "有思想的"
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
self.habby = "女"
print("吃饭")
sun = Human("孙宇", 18)
sun.eat()
print(sun.__dict__)
- 在类的外部也可以添加
class Human:
mind = "有思想的"
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, argv):
print("吃饭")
sun = Human("孙宇", 18)
sun.sex = "男"
print(sun.__dict__)
何处添加类的属性
- 类的内部
class Human:
mind = "有思想的"
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, argv):
Human.body = argv
print("吃饭")
sun.eat("大脸")
print(Human.__dict__)
- 类的外部
class Human:
mind = "有思想的"
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, argv):
print("吃饭")
Human.lunguage = "中文"
print(Human.__dict__)
对象空间与类空间的关系
对象空间与类空间有相同的名字,对象肯定先从对象空间查找
查找顺序:
对象. 名字:对象空间 类对象指针 ---> 类空间 ---> 父类空间
类名. 名字:类空间 ---> 父类空间
class Human:
mind = "有思想的"
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, argv):
print("吃饭")
sun.mind = "无脑"
print(sun.mind) # 无脑
print(Human.mind) # 有思想的
类与类之间的关系
依赖关系:主从之分
将一个类的类名或者对象传入另一个类的方法
class Elephant:
def __init__(self, name):
self.name = name
def open(self, obj):
print(f"{self.name} 默念三声:3,2,1 开门")
obj.be_open()
def close(self, obj):
print(f"{self.name} 默念三声“3,2,1 关门")
obj.be_close()
class Refrigerator:
def __init__(self, name):
self.name = name
def be_open(self):
print(f"{self.name} 冰箱 被打开了")
def be_close(self):
print(f"{self.name} 冰箱 被关闭了")
qiqi = Elephant("qiqi")
haier = Refrigerator("haier")
qiqi.open(haier) # 主.方法(从)
qiqi.close(haier)
# qiqi 默念三声:3,2,1 开门
# haier 冰箱 被打开了
# qiqi 默念三声“3,2,1 关门
# haier 冰箱 被关闭了
关联关系
与组合相似
class Boy:
def __init__(self, name, girlfriend=None):
self.name = name
self.girlfriend = girlfriend
def have_a_diner(self):
if self.girlfriend:
print(f"{self.name}请他的{self.girlfriend.age}岁的,{self.girlfriend.body}女朋友{self.girlfriend.name}一起吃烛光晚餐")
else:
print("吃啥吃")
class Girl:
def __init__(self, name, age, body):
self.name = name
self.age = age
self.body = body
def skill(self,obj):
print(f"{obj.name}的女朋友{self.name} 会用萝莉音直播")
yec = Boy("叶尘")
qiao = Girl("乔碧萝", 53, "小钢炮")
yec.girlfriend = qiao
yec.have_a_diner()
yec.girlfriend.skill(yec)
# qiao = Girl("乔碧萝", 53, "小钢炮")
# yec = Boy("叶尘", qiao)
# yec.have_a_diner()
# yec.girlfriend.skill(yec)
组合关系
组合:将一个类的对象封装到另一个类的对象的属性中,就叫组合。
class GameRole:
def __init__(self, name, ad, hp):
self.name = name
self.ad = ad
self.hp = 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
print(f"{p1.name}利用{self.name}给了{p2.name}一下子,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")
gailun = GameRole("盖伦", 15, 800)
xin = GameRole("赵信", 20, 500)
sword = Weapon("大宝剑", 20)
# 盖伦利用大宝剑给赵信一下子
sword.weapon_attack(gailun, xin)
# 1、功能虽然实现了,但是逻辑上不合理,应该是人物对象调用方法.主体
# 2、游戏人物本身就应该绑定武器属性
class GameRole:
def __init__(self, name, ad, hp):
self.name = name
self.ad = ad
self.hp = hp
def weapon_swe(self, obj):
self.weapon = obj # 组合关系
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 # self永远默认接收本类实例化对象或者子类对象
print(f"{p1.name}利用{self.name}给了{p2.name}一下子,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")
gailun = GameRole("盖伦", 15, 800)
xin = GameRole("赵信", 20, 500)
sword = Weapon("大宝剑", 20)
# 给游戏人物封装武器属性
gailun.weapon_swe(sword)
gailun.weapon.weapon_attack(gailun, xin)
day22——从空间角度研究类、类与类之间的关系的更多相关文章
- Python进阶(十四)----空间角度研究类,类与类之间的关系
Python进阶(十四)----空间角度研究类,类与类之间的关系 一丶从空间角度研究类 对象操作对象属性 class A(): address = '沙河' def __init__(self, na ...
- 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系
(1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器能够自己定义不同的状态栏例如以下: -(BOOL)prefersStatusBa ...
- Java学习8——类(对象)之间的关系
(基础语法结束,开始看面向对象) 关联 关联体现的是两个类之间语义级别的一种依赖关系,比如我和我的老师. 继承(一般和特殊) 继承是指一个类继承另外一个类的的功能,并可以增加新的功能,"XX ...
- 百万年薪python之路 -- 面向对象之:类空间问题以及类之间的关系
面向对象之:类空间问题以及类之间的关系 1.从空间角度研究类 1.何处添加对象属性 class A: def __init__(self,name): self.name = name def fun ...
- PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)
前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...
- 深入研究java.lang.ThreadLocal类 (转)
深入研究java.lang.ThreadLocal类 一.概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thr ...
- 深入研究java.lang.ThreadLocal类(转)
引用:http://lavasoft.blog.51cto.com/62575/51926/ 一.概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并 ...
- 深入研究java.lang.ThreadLocal类
一.概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许 ...
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
随机推荐
- java 参数传递、对象、封装
参数传递分为值传递(传值)和引用传递(传地址). 面向对象的三大特征: 1. 封装 2. 继承 3. 多态 封装表现: 1.方法就是一个最基本封装体. 2.类其实也是一个封装体. 封装的好处: 1.提 ...
- ABP 01 项目的基本运行
原文:https://www.cnblogs.com/ldybyz/p/8441084.html 照着这篇文章弄 一般是没有什么问题的 记录一下我出现的问题,大多是没有仔细看文章. 1.无法迁移数据库 ...
- 你真的知道Java中boolean类型占用多少个字节吗?
为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就boolean类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean 这 ...
- ELK(Elasticsearch + Logstash + Kibana) 日志收集
单体应用或微服务的场景下,每个服务部署在不同的服务器上,需要对日志进行集重收集,然后统一查看所以日志. ELK日志收集流程: 1.微服务器上部署Logstash,对日志文件进行数据采集,将采集到的数据 ...
- asp.net core session使用
一.配置回话状态 Microsoft.AspNetCore.App metapackage 中包含的 Microsoft.AspNetCore.Session 包提供中间件来管理会话状态. 若要启用会 ...
- git修改提交作者和邮箱
作用一名程序员,我们会经常混迹与不同的代码仓库,时常不同仓库会有作者信息验证.比如公司内建的gitlab一般会要求统一使用公司内部的域账号签名:github要求使用github账号签名等.因此,很容易 ...
- cesium地形瓦片(HeightMap)格式
目录 1.瓦片切分规则 2..terrain瓦片格式分析 参考资料: heightmap 1.0 Tile Map Service Specification 国内主要地图瓦片坐标系定义及计算原理 H ...
- 将本地文件夹添加到git仓库
1.git init; 2.git add . 3.git commit -m "初始化" 4.git remote add origin https://github.com/g ...
- python开发笔记-str转字典
后台接收到post请求数据格式为json格式的字符串,不能直接用字典的get方法 909090909090909090909090909090909 Internal Server Error: /g ...
- 使用Python解压zip、rar文件
解压 zip 文件 基本解压操作 import zipfile ''' 基本格式:zipfile.ZipFile(filename[,mode[,compression[,allowZip64]]]) ...