类的空间问题及类之间的关系
类的空间问题
1.何处可以添加对象属性
class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = sexobj = 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__里面添加,还可以在类的其他方法或者类的外面添加。**
2.何处可以添加类的静态属性
class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = sexdef func1(self):A.bbb = 'ccc'A.aaa = "alex" # 类的外部添加
print(A.__dict__)
A.func1(111) # 类的内部添加
print(A.__dict__)
总结:类的属性不仅可以在类内部添加,还可以在类的外部添加。
3.对象如何找到类的属性
对象之所以可以找到类,是因为对象空间有类对象指针
对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->.....
类名查找属性的顺序:先从本类空间找 -------> 父类空间找--------> ........
上面的顺序都是单向不可逆,类名不可能找到对象的属性。
类之间的关系
类之间存在以下几种关系:
1.依赖关系
2.关联关系
3.组合关系
4.聚合关系
5.实现关系
6.继承关系(类的三大特性)
依赖关系
依赖关系:将一个类的对象或者类名传到另一个类的方法使用。此时, 我们说, ⼤象和冰箱之间就是依赖关系. 我⽤着你. 但是你不属于我.
class Elephant:def __init__(self,name):self.name = namedef 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 = namedef 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 = nameself.girlfriend = girlfrienddef 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 = nameself.girlfriend = girlfrienddef 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 = nameself.age = ageself.body = bodydef 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 = nameself.ad = adself.hp = hpdef attack(self,p1):p1.hp = p1.hp - self.adprint(f"{self.name}攻击{p1.name},{p1.name}掉了{self.ad},还剩{p1.hp}血")print(f"{p1.name}的血量为{p1.hp}")def equipment_wea(self,wea):self.weapon = weaclass Weapon:def __init__(self,name,ad):self.name =nameself.ad = addef weapon_attack(self,p1,p2):print(f"self:{self}")p2.hp =p2.hp -self.adprint(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) # 组合:给一个对象封装一个属性,该属性是另一个类的对象
组合:将一个类的对象封装到另一个类的对象的属性中,就叫组合。