面向对象之:类空间问题以及类之间的关系

类的空间问题

添加对象属性

  • 总结:对象的属性不仅可以在__init__里面添加,还可以在类的其他方法或者类的外面添加。
class A:mind = "free"def __init__(self,name):self.name = namedef func(self,sex):self.sex = sex# 类外面可以:
obj = A('barry')
del obj.mind # 会报错 必须利用类(直接/间接)删除对象的类中静态属性
obj.age = 18
print(obj.__dict__)  # {'name': 'barry', 'age': 18}# 类内部也可以:
obj = A('barry') # __init__方法可以。obj.func('男')  # func 方法也可以。

添加类的静态属性

  • 总结:类的属性不仅可以在类内部添加,还可以在类的外部添加。
class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = sexdef func1(self):A.bbb = 'ccc'# 类的外部可以添加A.aaa = 'taibai'
print(A.__dict__)# 类的内部也可以添加。A.func1(111)
print(A.__dict__)

对象找到类的属性 (对象指针) 查找顺序

  • 对象查找属性的顺序:本对象空间找 ------> 类空间找 ------> 父类空间找 ------->.....
  • 类名查找属性的顺序:本类空间找 -------> 父类空间找--------> ........
  • 上面的顺序都是单向不可逆,类名不可能找到对象的属性。

类与类之间的关系

  1. 依赖关系(弱)
  2. 关联关系
  3. 组合关系
  4. 聚合关系
  5. 实现关系

依赖关系 (弱) / 主从关系

  • 将一个类的类名或者对象传给另一个类的方法中
class Elephant:def __init__(self,name):self.name = namedef open(self,ref1):print(f"{self.name}大象默念三声:芝麻开门")ref1.open_door()def close(self,ref1):print(f"{ele.name}大象默念三声:芝麻开门")  # 写死了 把ele.name换成 self.name 动态获取ref1.close_door()class Refrigerator:def __init__(self,name):self.name = namedef open_door(self):print(f"{self.name}冰箱门被打开了")def close_door(self):print(f"{self.name}冰箱门被关上了")ele = Elephant("琪琪")
ref = Refrigerator("美菱")
ele.open(ref)
ele.close(ref)

关联,聚合,组合关系

关联关系

  • 两种事物必须是互相关联的. 但是在某些特殊情况下是可以更改和更换的.

聚合关系

  • 属于关联关系中的⼀种特例. 侧重点是xxx和xxx聚合成xxx. 各⾃有各⾃的声明周期 / A+B = C A与B

组合关系

  • 属于关联关系中的⼀种特例. 写法上差不多. 组合关系比聚合还要紧密
  • 将一个对象封装成另一个对象的属性(直接/间接 使用)
  • 一个类的方法只能由此类的对象调用(直接/间接 使用)
  • 一个类的方法的第一个参数self只接受此类的对象的一切(直接/间接 使用)

组合:(聚合,组合,关联)

# 示例1
class Boy:def __init__(self,name):self.name = namedef meet(self,girl_friend = None):self.girl_friend = girl_friend # wu对象空间 : girl_friend : objectdef have_dinner(self): # self = wu这个对象空间if self.girl_friend:print(f"{self.name}请{self.girl_friend.name}一起吃饭")self.girl_friend.shopping(self) # (self = wu对象空间)else:print("单生狗,吃什么吃")class Girl:def __init__(self,name,age):self.name = nameself.age = agedef shopping(self,boy_friend):self.boy_friend = boy_friendprint(f"{self.boy_friend.name}和{self.name}一起去购物")wu = Boy("吴超")
flower = Girl("如花",48)
wu.meet(flower)
wu.have_dinner()
# 示例2
class GameRole:def __init__(self, name, hp):self.name = nameself.hp = hpdef equit_weapon(self, wea):self.weapon = wea # 组合: 给gailun这个对象封装了一个为weapon属性,属性值为wea == great_sword对象class Weapon:def __init__(self, name, ad):self.name = nameself.ad = addef weapon_attack(self, p1, p2):p2.hp = p2.hp - self.adprint(f'{p1.name}利用{self.name}砍了{p2.name}一刀,{p2.name}还剩{p2.hp}血')gailun = GameRole('盖伦', 100)
zhaoxin = GameRole('赵信', 90)
great_sword = Weapon('大保健', 30)
gailun.equit_weapon(great_sword)  # 依赖关系
gailun.weapon.weapon_attack(gailun, zhaoxin)

转载于:https://www.cnblogs.com/fanxss/p/11147179.html

面向对象之: 类空间问题及类之间的关系相关推荐

  1. 02 面向对象之:类空间问题以及类之间的关系

    一. 类的空间问题 1.1 何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex ...

  2. Python学习,类空间问题及类之间的关系

    一. 类的空间问题** 1.1 何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex):self.s ...

  3. 详解:面向对象与面向过程的比较 类之间的关系:泛化、实现、依赖、关联、聚合、组合

    文章目录 1.面向对象程序设计概述 1.1 面向对象程序设计 1.2 传统结构化程序设计 1.3 面向对象与面向过程举例 2.类之间的关系 2.1 泛化/继承 2.2 实现 2.3 依赖 2.4 关联 ...

  4. Day-16 面向对象03 类与类之间的关系

    一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...

  5. 面向对象的基本概念(二)--UML.类之间的关系

    8.接口和类继承 (1)接口中不能有非抽象方法,但抽象类中可以有. (2)一个类能实现多个接口,但只能有一个父类. ( 3)接口并不属于继承结构,它实际与继承无关,因此无关的类也可以实现同一个接口. ...

  6. python:类的空间问题 类与类之间的关系

    1.类的空间问题 1.1何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = ...

  7. python类的空间问题及类之间的关系

    类的空间问题及类之间的关系 类的空间问题 1.何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex) ...

  8. UML类图简介及类与类之间的关系

    UML(Unified Modeling Language,统一建模语言)建模是面向对象开发设计方法中的第一步,用UML来表达设计模式不仅方便了开发人员的交流,而且更加清晰.准确.UML定义了5类10 ...

  9. python类与类的关系_python 类与类之间的关系

    一.依赖关系(紧密程度最低) (1)简单的定义:就是方法中传递一个对象.此时类与类之间存在依赖关系,此关系比较低. (2)实例植物大战僵尸简易版 题目要求:创建一个植物,创建一个僵尸 1.植物:名字. ...

最新文章

  1. java基础--日期--练习集锦
  2. matlab 算法设计,计算方法——算法设计及其MATLAB实现
  3. 清华大学施路平:双脑驱动的人工通用智能
  4. ASP.NET、Ajax、Silverlight学习电子资料汇总
  5. python爬虫原理-爬虫原理解析
  6. 【MATLAB】数据类型 ( 执行代码 | 清空命令 | 注释 | 数字 | 字符 | 字符串 )
  7. TCP/IP协议示意图
  8. PP部分主数据导出SQVI设置
  9. 刚体运动中变换矩阵的逆
  10. nodejs 实现抓取数据
  11. 关于Mytatis动态拼接in语句并且按照指定顺序排序的问题
  12. jmeter JDBC 连接数据库
  13. redis的发布和订阅
  14. JUC学习之CountDownLatch入门
  15. 《老罗Android开发视频教程》老罗来交国庆的答卷了
  16. win7下安装PADS2007
  17. vuejs登陆页面_20个最佳Vuejs登陆页面模板
  18. 洛谷3356火星探险问题
  19. 卡塔尔称攻击卡塔尔通讯社黑客来自断交国
  20. 放大器的传递函数_运放全差分放大器实现单端与平衡的相互转换

热门文章

  1. 深度遍历 java_java 图论一 深度遍历和广度遍历
  2. 观察者模式在android网络监控下的运用
  3. PLSQL创建DBLINK
  4. JNI_Android项目中调用.so动态库实现详解【转】
  5. c# 去除字符串中的换行符 \r\n
  6. python实验报告代写_TensorFlow作业代写、代做Python程序语言作业、代写github课程作业、Python实验作业代写...
  7. 不等距双杆模型_搜索中的深度匹配模型(下)
  8. MetadataCache分析
  9. (39)FPGA四种常用逻辑门(与非门)
  10. (62)Verilog HDL模块例化system Verilog模块