Python面向对象 | 类空间及类之间的关系
一. 类的空间问题
1何处可以添加对象属性
class A:
def __init__(self,name):
self.name = name
def func(self,sex):
self.sex = sex
# 类外面可以
obj = A('barry')
obj.age = 18
print(obj.__dict__) # {'name': 'barry', 'age': 18}
# 类内部也可以
obj = A('barry') # __init__方法可以。
obj.func('男') # func 方法也可以。
总结:对象的属性不仅可以在__init__里面添加,还可以在类的其他方法或者类的外面添加。
2. 对象如何找到类的属性
对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->.....
类名查找属性的顺序:先从本类空间找 -------> 父类空间找--------> ........
实例化一个对象,可以通过点的方式找到类中的属性
二. 类与类之间的关系
类与类中存在以下关系:
- 1. 依赖关系
- 2. 关联关系
- 3. 组合关系
- 4. 聚合关系
- 5. 实现关系
- 6. 继承关系(类的三大特性之一:继承。)
1 依赖关系
依赖关系:将一个类的对象或者类名传到另一个类的方法使用。此时, 我们说, 大象和冰箱之间就是依赖关系. 我用着你. 但是你不属于我. 这种关系是最弱的
class Elphant:
def __init__(self, name):
self.name = name
def open(self,obj1):
print('大象要开门了,默念三声,开')
obj1.open_door()
def close(self):
print('大象要关门了,默念三声,关')
class Refrigerator:
def open_door(self):
print("冰箱被打开了")
def close_door(self):
print("冰箱被关上了")
elphant1 = Elphant('大象')
haier = Refrigerator()
elphant1.open(haier)
动作发起的主体是大象
2 关联,聚合,组合关系
其实这三个在代码上写法是一样的. 但是, 从含义上是不一样的.
1. 关联关系. 两种事物必须是互相关联的. 但是在某些特殊情况下是可以更改和更换的.
2. 聚合关系. 属于关联关系中的⼀种特例. 侧重点是xxx和xxx聚合成xxx. 各自有各自的声明周期. 比如电脑. 电脑里有CPU, 硬盘, 内存等等. 电脑挂了. CPU还是好的. 还是完整的个体
3. 组合关系. 属于关联关系中的⼀种特例. 写法上差不多. 组合关系比聚合还要紧密. 比如⼈的⼤脑, 心脏, 各个器官. 这些器官组合成⼀个⼈. 这时. 人如果挂了. 其他的东西也跟着挂了
组合:将一个类的对象封装到另一个类的对象的属性中,就叫组合。组合关系和聚合关系,其实代码上差别不大。
咱们设计一个游戏人物类,让实例化几个对象让这几个游戏人物实现互殴的效果。
class Gamerole:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,p1):
p1.hp -= self.ad
print('%s攻击%s,%s掉了%s血,还剩%s血'%(self.name,p1.name,p1.name,self.ad,p1.hp))
def equip_weapon(self,wea):
self.wea = wea # 组合:给一个对象封装一个属性改属性是另一个类的对象
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 - p1.ad
print('%s 利用 %s 攻击了%s,%s还剩%s血'
%(p1.name,self.name,p2.name,p2.name,p2.hp))
# 实例化三个人物对象:
barry = Gamerole('太白',10,200)
panky = Gamerole('金莲',20,50)
pillow = Weapon('绣花枕头',2)
# 给人物装备武器对象。
barry.equip_weapon(pillow)
# 开始攻击
barry.wea.weapon_attack(barry,panky)
上面就是组合,只要是人物.equip_weapon这个方法,那么人物就封装了一个武器对象,再利用武器对象调用其类中的weapon_attack方法。
Python面向对象 | 类空间及类之间的关系的更多相关文章
- python摸爬滚打之day17----类与类之间的关系
1.类与类之间的联系 1.1 依赖关系 类A中使用了类B, 类B作为参数传进类A的方法中被使用. 这种关系中类与类之间的联系是最轻的. class Elephant: def open(self,e ...
- 百万年薪python之路 -- 面向对象之:类空间问题以及类之间的关系
面向对象之:类空间问题以及类之间的关系 1.从空间角度研究类 1.何处添加对象属性 class A: def __init__(self,name): self.name = name def fun ...
- Python面向对象之:类空间问题以及类之间的关系
一. 类的空间问题 1.1 何处可以添加对象属性 class A: def __init__(self,name): self.name = name def func(self,sex): se ...
- python基础学习笔记——类空间问题以及类之间的关系
一. 类的空间问题 1.1 何处可以添加对象属性 class A: def __init__(self,name): self.name = name def func(self,sex): self ...
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
- python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系
https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...
- Python面向对象(类之间的关系)(三)
类与类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻 ...
- Python进阶(十四)----空间角度研究类,类与类之间的关系
Python进阶(十四)----空间角度研究类,类与类之间的关系 一丶从空间角度研究类 对象操作对象属性 class A(): address = '沙河' def __init__(self, na ...
- python学习 day017打卡 类与类之间的关系
本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员 一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖 ...
随机推荐
- PyQt5笔记之标签
标签 QLabel用于显示文本或图像.没有提供用户交互功能.标签的视觉外观可以通过各种方式进行配置,并且可以用于为另一个窗口小部件指定焦点助记键. 一个QLabel可以包含以下任意内容类型: 内容 设 ...
- Eureka概述
1:Eureka是什么 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.Eureka是一个基于REST的服务,用于定位服务,以及·实现云端中间层服务发现和故障转移 ...
- GitHUB帐号申请及相关操作
GitHUB帐号申请及相关操作 GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub.GitHub 于 2008 年 4 月 10 ...
- sql server获取格式化的当前日期
在SQL Server中获取格式化成yyyy-MM-dd的当前日期: ), ); -- 2019-06-17 首先我们知道getdate()函数是用来获取当前日期的,它返回的类型是datetime类型 ...
- [Silverlight 4] 參數的傳遞方法
Silverlight都會有一個專案叫 *.Web,有個ManagePage.aspx裝戴Silverlight元件,也是應用程式的入口 然後還會有一個專案(此處叫ManageBack),會編譯成Si ...
- 我是如何一步步编码完成万仓网ERP系统的(六)产品库设计 2.百度Ueditor编辑器
https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...
- TP5.1 调用common里面自定义的常量
公共文件:\application\common.php define('cms_password', cms); 控制器引用: 调用: $aa = cms_password; dump(cms_pa ...
- jQuery实现的全选、反选和获取当前所有选中的值功能
链接: jQuery实现的全选.反选和获取当前所有选中的值功能 <ul id="list"> <li><label><input type ...
- centos 查看硬盘情况
lsblk 查看分区和磁盘 df -h ...
- Centos 7 解决free -m 下buff/cache缓存很高
Linux服务器运行一段时间后,由于其内存管理机制,会将暂时不用的内存转为buff/cache,这样在程序使用到这一部分数据时,能够很快的取出,从而提高系统的运行效率,所以这也正是linux内存管理中 ...