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——从空间角度研究类、类与类之间的关系的更多相关文章

  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. Numpy | 16 算术函数

    加减乘除 NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide(). 注意:数组必须具有相同的形状或符合数组广播规则. import nu ...

  2. Bzoj 4517: [Sdoi2016]排列计数(排列组合)

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MB Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ...

  3. vs2017使用OpenGL的方法

    第一步:将相应的.lib和.h文件放到相应的文件夹中,具体如下: 将GLAUX.LIB,GLU32.LIB,OPENGL32.LIB 放到....\VC\Tools\MSVC\14.10.25017\ ...

  4. Excel中筛选两个表中相同的数据和快速填充一列的公式

    将两个工作表放在一个文件中,使用if函数和countif函数判断 =if(判断条件countif(区域,条件),真值,[假值]) 实例 =if(countif(Sheet2!$A$1:$A$44,A2 ...

  5. 【转】Android原生PDF功能实现

    1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示.关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的同 ...

  6. 投稿SCI杂志 | 如何撰写cover letter | 如何绘制illustrated abstract

    现在大部分学术期刊杂志都要求提供这两样东西. 一个是面向editor的文章和研究的高度总结:一个是面向读者的高度总结,一图胜千言. 如何制作动画摘要呢? 收集素材,大部分内容在PPT里就能完成. 如何 ...

  7. ubuntu16 安装 qBittorrent ( Linux下BT下载图形工具 )

    qBittorrent 是QT编写的一款BT下载软件,支持FreeBSD, Linux, macOS, OS/2, Windows: 官网:https://www.qbittorrent.org/ 在 ...

  8. Visionworks OpenVX

    [TOC] Visionworks OpenVX OpenVX heterogeneous computation framework Spec OpenVX 1.2源碼解析 - 目錄結構 除了官方的 ...

  9. HDFS修改副本数,并生效。

    1.hadoop集群使用的ucloud的uahdoop 2.是公司集群配置小,只有两台core节点,实际就是两台的datanode. 容量占用超过了80%,需要缩减副本以空出容量. 3.查看 hado ...

  10. Android Studio的下载、安装与配置

    1 下载 下载地址:http://www.android-studio.org/index.php ☟这里下载的是3.1.2版本 2 安装与配置 2.1 初步安装 默认就可以,点击红框内按钮依次进行安 ...