6.3 类的空间问题及类之间的关系
- 类空间的问题
- 何处可以添加对象属性
-
class A: def __init__(self,name): self.name = name def func(self,sex): self.sex = sex obj = A("alex") obj.age = 18 # 通过__init__方法添加 print(obj.__dict__) obj1 = A("wusir") obj.func("男") # 通过func方法添加 print(obj1.__dict__) # 结果: {'name': 'alex', 'age': 18} {'name': 'wusir'}
- 总结:对象的属性不仅可以在__init__里面添加,还可以在类的其他方法或者类的外面添加
- 何处可以添加类的静态属性
-
class A: def __init__(self,name): self.name = name def func(self,sex): self.sex = sex def func1(self): A.bbb = 'ccc' A.aaa = "alex" # 类的外部添加 print(A.__dict__) A.func1(111) # 类的内部添加 print(A.__dict__)
- 总结:类的属性不仅可以在类内部添加,还可以在类的外部添加
-
- 对象如何找到类的属性
- 对象之所以可以找到类,是因为对象空间有类对象指针
- 对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->.....
- 类名查找属性的顺序:先从本类空间找 -------> 父类空间找--------> ........
- 上面的顺序都是单向不可逆,类名不可能找到对象的属性。
- 类之间的关系
- 类之间存在以下几种关系:依赖关系、关联关系、组合关系、聚合关系、实现关系、继承关系
- 依赖关系
- 依赖关系:将一个类的对象或者类名传到另一个类的方法使用。此时, 我们说, ?象和冰箱之间就是依赖关系. 我?着你. 但是你不属于我.
-
class Elephant: def __init__(self,name): self.name = name def open(self,obj): print(f"{self.name}默念3,2,1,{obj.name}打开了") def close(self): print(f"{self.name}关上了{self.name}的门") class Bx: def __init__(self,name): self.name = name def open(self,obj1): print(f"{self.name}的门被{obj1.name}打开了") def close(self,obj1): print(f"{self.name}的门被{obj1.name}关上了") obj1 = Elephant("qq") obj = Bx("B") obj1.open(obj)
- 组合关系(2,3,4)
-
class Boy: def __init__(self,name,girlfriend=None): self.name = name self.girlfriend = girlfriend def have_a_dinner(self): if self.girlfriend: print(f"{self.name}请他的女朋友{self.girlfriend}一起烛光晚餐") else: print('单身狗,吃什么吃') liye = Boy("李业") liye.have_a_dinner() liye = Boy("李业") liye.girlfriend = "乔碧萝" # 在对象外部给对象赋值 liye.have_a_dinner() class Boy: def __init__(self,name,girlfriend = None): self.name = name self.girlfriend = girlfriend def have_a_dinner(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): print(f'{self.name}会用萝莉音直播') liye = Boy("李业") qiao = Girl("乔碧萝",58,"小光跑") liye.girlfriend = qiao # 对象静态属性为qiao对象 liye.have_a_dinner() class GameRole: def __init__(self,name,ad,hp): self.name = name self.ad = ad self.hp = hp def attack(self,p1): p1.hp = p1.hp - self.ad print(f"{self.name}攻击{p1.name},{p1.name}掉了{self.ad},还剩{p1.hp}血") print(f"{p1.name}的血量为{p1.hp}") def equipment_wea(self,wea): self.weapon = wea class Weapon: def __init__(self,name,ad): self.name =name self.ad = ad def weapon_attack(self,p1,p2): print(f"self:{self}") p2.hp =p2.hp -self.ad print(f"{p1.name}利用{self.name}给了{p2.name}一下子,{p2.name}还剩{p2.hp}血") gl = GameRole('盖伦',10,100) zx = GameRole('菊花信',15,80) sword = Weapon('宝剑',15) Musket = Weapon('长缨枪',30) gl.equipment_wea(sword) # 给人物装备武器对象。 gl.weapon.weapon_attack(gl,zx) # 组合:给一个对象封装一个属性,该属性是另一个类的对象
- 组合:将一个类的对象封装到另一个类的对象的属性中,就叫组合
-
原文地址:https://www.cnblogs.com/zhangdadayou/p/11415339.html
时间: 2024-10-07 14:13:47